DOBON.NET DOBON.NETプログラミング掲示板過去ログ

VB.NETでNewしたFormのDisposeのタイミングについて

環境/言語:[VB.NET]
分類:[.NET]

初歩的な質問で申し訳ありません。

NewしたFormのDisposeのタイミングなのですが、
@呼び元(Newしたルーチン)でDisposeするのが正しいのでしょうか?それとも、A呼び先のFormのClosedイベントでDisposeするのが正しいのでしょうか?

Sub Main()

'フォーム(Form1)のインスタンスを作成
Dim f1 As New Form1

'フォーム(Form1)を表示
f1.ShowDialog()

f1.Dispose() ←@の場合

End Sub

Private Shared Sub f1_Closed( _
ByVal sender As Object, ByVal e As EventArgs)

  Me.Dispose() ←Aの場合

End Sub

宜しくお願い致します。
■No25462に返信(ながさんの記事)
> NewしたFormのDisposeのタイミングなのですが、
ShowDialog で呼ぶ場合、通常は呼び出し元が面倒を見ます。
2005 以降であれば、
 Using f1 As New Form1()
  f1.ShowDialog()
 End Using
の構文を使うと良いでしょう。


あるいは、VB の InputBox などのように、フォームの呼び出しと Dispose を
隠蔽した実装にするのも良いかと。


> 呼び先のFormのClosedイヘ゛ントでDisposeするのが正しいのでしょうか?
通常、フォームのイベントを処理するのは、自フォームだけでしょうが、時には
別のクラスが、AddHandler なり WithEvents などで利用する事もあります。

その場合、自フォームでイベントを捉えた後、他のクラスにも同イベントが
通知される可能性があるので、イベント内部での破棄はあまりお奨めしません。
> 通常、フォームのイベントを処理するのは、自フォームだけでしょうが、時には
> 別のクラスが、AddHandler なり WithEvents などで利用する事もあります。
>
> その場合、自フォームでイベントを捉えた後、他のクラスにも同イベントが
> 通知される可能性があるので、イベント内部での破棄はあまりお奨めしません。

なるほど。
これで自信をもってプログラムを組むことが出来ます。

丁寧にご回答頂き、どうもありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板