使用 Form 時,我們可以從 FormClosing 事件知道 Form 準備要關閉了,
使用 UserControl 卻沒有這樣對應的公開事件,
但 Control 已經有設計這樣的 protected event,叫做 OnHandleDestroyed,
當呼叫 Dispose() 時,或者使用 using () {} 自動呼叫 Dispose() 時,就會觸發 OnHandleDestroyed,
意思是控制項的控制代碼準備被終結,表示這個控制項不能再繼續使用,接著就等待被GC回收,
所以透過 override OnHandleDestroyed 事件,可以在裡面將 UserControl 所產生的某些控制項進行回收,
例如在UserControl 所產生的 Form 若還沒釋放資源,你希望在 UserControl 被釋放資源前,
先將 Form 關閉,就能在UserControl 覆寫的 OnHandleDestroyed 事件中處理釋放資源,
例如以下 _form2 是全域變數的 Form型態,會先呼叫關閉方法後,再釋放所有資源:
protected override void OnHandleDestroyed(EventArgs e)
{
if (_form2 != null)
{
using (_form2)
{
_form2.Close();
}
}
base.OnHandleDestroyed(e);
}
需不需要呼叫 Close 取決於 FormClosing 等關閉的事件中,有沒有寫相關的代碼,
如果沒有,也可以簡單的直接寫
protected override void OnHandleDestroyed(EventArgs e)
{
if (_form2 != null)
{
_form2.Dispose();
}
base.OnHandleDestroyed(e);
}
以上有誤的話,請不吝嗇糾正,感謝。