在WinForms UserControl中取消订阅事件的位置

时间:2009-09-01 12:31:15

标签: c# winforms events user-controls

您在哪里取消订阅UserControl中的活动?我在Load事件中订阅它,就像我在表单中所做的那样。在表格中,我通常会在Closing事件中取消订阅,但我在UserControl中找不到类似的内容...

3 个答案:

答案 0 :(得分:4)

当您想要执行此操作时 次(例如,使用CAB时)。
为了完整起见,您的问题的答案是:

protected override void OnCreateControl()
{
    base.OnCreateControl();
    if(!DesignMode) //only time this.ParentForm should be null
        this.ParentForm.FormClosing += ParentForm_FormClosing;
}

private void ParentForm_FormClosing(object sender, FormClosingEventArgs e)
{
    //Unregister events here
}

您也可以覆盖Dispose()

答案 1 :(得分:2)

是否有必要取消订阅?是否在卸载后保留用户控件?如果没有,您不需要担心事件处理程序,因为只要从内存中删除用户控件,事件处理程序也是如此。你不会以这种方式泄漏引用。

答案 2 :(得分:1)

正如其他人所说,在您的方案中确实需要取消订阅吗?

如果您确实需要取消订阅,那么您完全按照订阅的相反方式执行:

UserControl1.Click -= new EventHandler(UserControl1_Click);