プロが教える店舗&オフィスのセキュリティ対策術

(VB2008EEです)Form1からForm2をモーダレスで表示(Show(Me))したのち、
Form2を、(Form2の)閉じるボタン(右上にあるXボタン)で閉じるときに、
単にHideするだけの処理に変更することは可能でしょうか。

デフォルトでは、閉じるボタンですと、Close()と同様、
Close(&Dispose)となると思いますが、Hide()処理に
変えられるかということです。

。。。

試しに、FormClosingイベントハンドラでHide()→e.cancel=Trueって
やってみたところ、(再度同じForm2のインスタンスを使ってShowができ、
さらに前回のText表示などが残っているなど)その場はうまく行ったように
見えたのですが、そうすると、アプリ(Form1)が閉じるボタンで終了しなくなって
しまいました。
(Application.Exitでもダメ、Endでは(強制終了とのことなので)OKですが)

Form2のClose処理をCancelしているからだ、とは思いますが。

ShowDialog→Xボタン(同じ記述のまま) の後では、終了可能です。

では、Show→Xボタンのあとで、同じインスタンスで、上記と同じように、
ShowDialog→Xボタンとしたあと、Form1のXボタンでアプリを
終了させようとするとどうなるか。

結果は、終了不能でした。
一度Show→Xしたらそれをどこかに覚えている?ってことなのでしょうか。。。

ここらへんの現象まで、合わせて説明できる方がいらっしゃったら
合わせてご説明いただけませんでしょうか。

。。。

なお、なぜこんなことするの?という実際論はここではなしで
純粋に技術論でお願いいたします。

A 回答 (1件)

Form2のFormClosingのコードはどのようになっているのでしょう?



Xまたはシステムメニューの閉じるの場合だけHideを実行したいなら

Private Sub Form2_FormClosing( 引数省略 )
  if e.CloseReason = CloseReason.UserClosing then
    e.Cancel = True
    me.Hide()
  end if
End Sub
といった具合にしてみてはいかがでしょう

この回答への補足

すいません、忘れがちな自分用にメモをここに書かせてください。

「フォームが閉じられる時その原因を知る」
http://dobon.net/vb/dotnet/form/unloadmode.html

「(MSDN)CloseReason 列挙体」
http://msdn.microsoft.com/ja-jp/library/system.w …

補足日時:2010/10/05 16:09
    • good
    • 0
この回答へのお礼

ありがとうございました。
なるほどーという感じです。

お礼日時:2010/10/05 16:05

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!