.ShowDialog()メソッドでフォームを開いたとします。
ある時点で、フォーム上のいくつかのコントロールにいくつかのイベントハンドラを添付します。
gt;
// Attach radio button event handlers.
this.rbLevel1.Click += new EventHandler(this.RadioButton_CheckedChanged);
this.rbLevel2.Click += new EventHandler(this.RadioButton_CheckedChanged);
this.rbLevel3.Click += new EventHandler(this.RadioButton_CheckedChanged);
フォームが閉じたら、これらのハンドラを削除する必要がありますね。
現在、FormClosingイベントが発生したときにこれを行っています。
gt;
private void Foo_FormClosing(object sender, FormClosingEventArgs e)
{
// Detach radio button event handlers.
this.rbLevel1.Click -= new EventHandler(this.RadioButton_CheckedChanged);
this.rbLevel2.Click -= new EventHandler(this.RadioButton_CheckedChanged);
this.rbLevel3.Click -= new EventHandler(this.RadioButton_CheckedChanged);
}
ただし、Dispose()メソッドでハンドラが削除された例がいくつかあります。
これを行うための「ベストプラクティス」の方法はありますか?
(C#を使用、Winforms、.NET 2.0)
ありがとう。
この場合、フォームもそのボタンもフォームの外部のコードによって参照されず、したがってオブジェクトグラフ全体がガベージコレクションされるため、ハンドラを削除する必要はありません。
いいえ、閉じているフォームのコントロールからイベントハンドラを削除する必要はありません。それらはすべて一緒に配置されます。
あなたはおそらくブラウザのメモリリークを避けるためにイベントハンドラを削除する必要があるウェブページを考えています。