[英]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.