And*_*ndy 13 c# event-handling winforms
假设我有一个通过.ShowDialog()方法打开的表单.
在某些时候,我将一些事件处理程序附加到窗体上的某些控件.
例如
// 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);
Run Code Online (Sandbox Code Playgroud)
当表单关闭时,我需要删除这些处理程序,对吧?
目前,我在触发FormClosing事件时执行此操作.
例如
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);
}
Run Code Online (Sandbox Code Playgroud)
但是,我已经看到一些在Dispose()方法中删除处理程序的示例.
这样做有"最佳实践"方式吗?
(使用C#,Winforms,.NET 2.0)
谢谢.
Ben*_*n M 18
在这种情况下,您不需要删除处理程序,因为表单外部的代码都不会引用表单及其按钮,因此整个对象图将被垃圾回收.