Suppose I have a form opened via the .ShowDialog() method.
At some point I attach some event handlers to some controls on the form.
e.g.
// 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);
When the form closes, I need to remove these handlers, right?
At present, I am doing this when the FormClosing event is fired.
e.g.
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);
}
However, I have seen some examples where handlers are removed in the Dispose() method.
Is there a 'best-practice' way of doing this?
(Using C#, Winforms, .NET 2.0)
Thanks.
You don't need to remove the handlers in this case because neither the form nor its buttons are referenced by code external to the form, and the entire object graph will therefore be garbage collected.
No, you don't need to remove the event handlers from controls on the form that is closing. They will all be disposed together.
You're probably thinking of web pages where removing event handlers is needed to avoid memory leaks in the browser.