簡體   English   中英

在WinForms UserControl中取消訂閱事件的位置

[英]Where to unsubscribe events in a WinForms UserControl

您在哪里取消訂閱UserControl事件? 我在Load事件中訂閱它,就像我在表單中所做的那樣。 在表單中,我通常會在Closing事件中取消訂閱,但我在UserControl找不到類似的東西......

有些時候你想(,例如使用時,要做到這一點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()

是否有必要取消訂閱? 是否在卸載后保留用戶控件? 如果沒有,您不需要擔心事件處理程序,因為只要從內存中刪除用戶控件,事件處理程序也是如此。 你不會以這種方式泄漏引用。

正如其他人所說,在您的場景中確實需要取消訂閱嗎?

如果你確實需要取消訂閱,那么你完全按照訂閱的相反方式完成:

UserControl1.Click -= new EventHandler(UserControl1_Click);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM