2010/02/05(Fri) 18:19:44 編集(投稿者)
■No46566 (いむら さん) に返信
えーと。。。悪いけど、[VB2008]で試す限りだめっぽい。。。
まずは ShowDialog の使い方のヘルプ読んできて。
http://msdn.microsoft.com/ja-jp/library/c7ykbedk.aspx
>解説
>ダイアログ ボックスとして表示されているフォームは Close メソッドで
>閉じられることはないため、フォームがアプリケーションで不要になった場合は、
>そのフォームの Dispose メソッドを呼び出す必要があります。
↓だめな根拠テストコード
Public Class Form1
'インスタンス・メンバに昇格
Private f As Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'frm2クラスのインスタンスを作成する
f = New Form2()
'frm2を表示する
'モーダルフォームとして表示する
f.ShowDialog()
Debug.Print(f.IsDisposed.ToString) 'ちゃんと破棄されたか確認→False(破棄されていない)出力
End Sub
End Class
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Close()
End Sub
Private Sub Form2_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
Debug.Print(Now & "Form2_Disposed") ' ちゃんと破棄されたら出力される
End Sub
End Class
↓もう、いいから、これにしといて(動作確認したら Debug.Print とかは消していいよ)のコード
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'関数内のみのスコープに降格
Dim f As Form2
'frm2クラスのインスタンスを作成する
f = New Form2()
'frm2を表示する
'モーダルフォームとして表示する
f.ShowDialog()
'///////////////////////////////
'/// 本来はここで f.DialogResult を確認したりごちゃごちゃする目的のために ShowDialog を使う
'///////////////////////////////
f.Dispose() '制御が戻ってきて、使わなくなったら明示的に破棄
Debug.Print(f.IsDisposed.ToString) 'ちゃんと破棄されたか確認
End Sub
End Class
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Close()
End Sub
Private Sub Form2_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Disposed
Debug.Print(Now & "Form2_Disposed")
End Sub
End Class