使用 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);
}