2011-11-23 105 views
2

在C#中處理UserControl時會發生什麼情況?我想趕上它來做一些清理工作,但是在查看設計器中可用的事件列表後,似乎沒有這樣的事情了?C#捕獲UserControl處理的事件是什麼?

+0

你如何創建用戶控制? – Oded

+0

很VSTO C#插件 – Jerome

+0

窗格那麼具體,我向它(以及我創建使用設計它,就這麼簡單) – Jerome

回答

6

這聽起來像Disposed事件是你在找什麼。

+0

有沒有讓一些清理工作可以做之前的用戶控件實際上是一個「轉讓」事件配置? – hrh

+1

@hrh它不是一個事件,但是你可以重寫你的用戶控件的['Dispose'(http://msdn.microsoft.com/en-us/library/d9yzd5cx.aspx)方法 - 這是你應該清理資源(確保您仍然稱爲基礎實施) – Justin

10

當您創建在yourUserControlName.Designer.cs文件中創建自動爲您Dispose方法的用戶控件。添加任何清理代碼的方法。您可能需要將自動生成的代碼更改爲如下所示:

protected override void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      if (components != null) 
      { 
       components.Dispose(); 
      } 
      // your clean up code here 
     } 
     base.Dispose(disposing); 
    } 

這樣您的清理代碼將不依賴於組件對象。

+1

建議:在組件清理之前進行清理,尤其是在需要清理組件時。舉例來說,如果你有這都需要在用戶控制設置要序列化的數據的BindingSource的用戶控件:你需要能夠訪問BindingSource的序列化 –

+2

您可以將這些代碼到你yourUserControlName.cs項目文件,因此您不必手動更改設計器文件中的任何代碼。 – JohnSaps

+0

你也可以重寫'OnHandleDestroyed',當底層HWnd被銷燬時,通常在父窗體關閉時會被調用。 –