Showイベントでよばれているフォームを消す方法

解決


nami  2002-08-01 11:56:43  No: 104600  IP: [192.*.*.*]

初めての投稿よろしくお願いします。
現在VBでフォームがふたつあります。
フォーム1からフォーム2を 
Form2.Show vbModal
で呼びます(ここは固定)
その時フォーム2では、チェックを行いエラーの時はフォームを表示せずに
メッセージボックスのみ表示してunloadしたいと思っています。
現在はForm_Activateでunloadしています。
それだと一瞬だけちらって見えてしまいます。
これを完璧に消す方法ってありますか?
もしあれば教えてください。よろしくお願いします。

編集 削除
raki  2002-08-01 12:56:57  No: 104601  IP: [192.*.*.*]

はじめまして、rakiといいます。
質問に対する答えですが、
フォーム2のLoadイベント内で、visibleをFalseにすればよろしいかと。
以下はフォーム2のオブジェクト名をForm2と仮定してのプログラムです。

Private Sub Form_Load()
   Form2.Visible = False
End Sub

どうでしょうか?

編集 削除
nami  2002-08-01 13:16:17  No: 104602  IP: [192.*.*.*]

raki様レスありがとうございます。
Private Sub Form_Load()
   Form2.Visible = False
End Sub
はやってみましたが、Showイベントのほうが強いようで
フォームが表示されてしまいます。
あと
me.hide
も試してみましたがフォームが表示されてしまいます。

編集 削除
蜻蛉  URL  2002-08-01 14:35:21  No: 104603  IP: [192.*.*.*]

Show を呼び出すと、必ず一回フォームが表示されます。
これはタイミングをどんなに調整してもしかたのないことです。

だいたいなぜフォーム2を消す必要があるんでしょうか?
エラーチェックスクリーンならそのまま表示しておいてもいいでしょう。

編集 削除
nami  2002-08-01 15:48:37  No: 104604  IP: [192.*.*.*]

蜻蛉様レスありがとうございます。
そうですよね。SHOWだと必ず表示されてしまいますよね。

消す必要は、その画面が見えたら流れ的におかしいからです。
全体的な流れか行くと、form2で入力チェックするのが間違え
の発端だと考えています。
しかし、色々なしがらみでform1は修正できない辛さがあり
ます・・・
とほほ〜〜

編集 削除
たかみちえ  URL  2002-08-02 00:21:53  No: 104605  IP: [192.*.*.*]

Delphiに関する質問の場で似たような質問があり、それに対する回答として、
"SendMessageを使うといい"というのをみたおぼえがあります。
確かそれも最良の方法ではなかったと思いますけど、
とりあえずフォームは隠れます。
(ちなみに本当に最良の解決策も、そこに書かれていたと思います…が、覚えてないです^^;)

  でもそもそも、"Showしない"という方法でもできるのでは?
サブフォームだったら、Loadでとりあえず呼び出しておいて、
問題があるようならば、Showメソッドを一度も呼ばずに終わる…と、どうでしょうか?
Form_Showの前には、Form_Initializeが起こると思うので、
そこで表示するかどうか決めればいいと思います。

編集 削除
nami  2002-08-02 16:11:07  No: 104606  IP: [192.*.*.*]

たかみちえ 様レスありがとうございます。

Showイベントではなくloadイベントなら問題がすぐに解決するのですが、
ユーザさんの強い意向でShowイベントを使ってます。
また、他のフォームではShowイベントの前に
on error resume next が入っていて
form2_loadのところで
unloadして、エラーなっても飛ばすという凄い力技を使っています^^

今回は他の画面と統一をとるために対処法としまして
フォームロードでエラーと判断すればフォームの表示個所を枠外にしてしまい
Form_ActivateでUNLOADしています。
それで見え方は同じなのでユーザさんも納得してくれました。。。

編集 削除