初めての投稿よろしくお願いします。
現在VBでフォームがふたつあります。
フォーム1からフォーム2を
Form2.Show vbModal
で呼びます(ここは固定)
その時フォーム2では、チェックを行いエラーの時はフォームを表示せずに
メッセージボックスのみ表示してunloadしたいと思っています。
現在はForm_Activateでunloadしています。
それだと一瞬だけちらって見えてしまいます。
これを完璧に消す方法ってありますか?
もしあれば教えてください。よろしくお願いします。
はじめまして、rakiといいます。
質問に対する答えですが、
フォーム2のLoadイベント内で、visibleをFalseにすればよろしいかと。
以下はフォーム2のオブジェクト名をForm2と仮定してのプログラムです。
Private Sub Form_Load()
Form2.Visible = False
End Sub
どうでしょうか?
raki様レスありがとうございます。
Private Sub Form_Load()
Form2.Visible = False
End Sub
はやってみましたが、Showイベントのほうが強いようで
フォームが表示されてしまいます。
あと
me.hide
も試してみましたがフォームが表示されてしまいます。
Show を呼び出すと、必ず一回フォームが表示されます。
これはタイミングをどんなに調整してもしかたのないことです。
だいたいなぜフォーム2を消す必要があるんでしょうか?
エラーチェックスクリーンならそのまま表示しておいてもいいでしょう。
蜻蛉様レスありがとうございます。
そうですよね。SHOWだと必ず表示されてしまいますよね。
消す必要は、その画面が見えたら流れ的におかしいからです。
全体的な流れか行くと、form2で入力チェックするのが間違え
の発端だと考えています。
しかし、色々なしがらみでform1は修正できない辛さがあり
ます・・・
とほほ〜〜
Delphiに関する質問の場で似たような質問があり、それに対する回答として、
"SendMessageを使うといい"というのをみたおぼえがあります。
確かそれも最良の方法ではなかったと思いますけど、
とりあえずフォームは隠れます。
(ちなみに本当に最良の解決策も、そこに書かれていたと思います…が、覚えてないです^^;)
でもそもそも、"Showしない"という方法でもできるのでは?
サブフォームだったら、Loadでとりあえず呼び出しておいて、
問題があるようならば、Showメソッドを一度も呼ばずに終わる…と、どうでしょうか?
Form_Showの前には、Form_Initializeが起こると思うので、
そこで表示するかどうか決めればいいと思います。
たかみちえ 様レスありがとうございます。
Showイベントではなくloadイベントなら問題がすぐに解決するのですが、
ユーザさんの強い意向でShowイベントを使ってます。
また、他のフォームではShowイベントの前に
on error resume next が入っていて
form2_loadのところで
unloadして、エラーなっても飛ばすという凄い力技を使っています^^
今回は他の画面と統一をとるために対処法としまして
フォームロードでエラーと判断すればフォームの表示個所を枠外にしてしまい
Form_ActivateでUNLOADしています。
それで見え方は同じなのでユーザさんも納得してくれました。。。
ツイート | ![]() |