前言
前几天在做一需求时,遇到一个问题:两个子窗体切换时,该如何判断之前的窗体是否已关闭,脑子中突然想到一个办法,用IsDisposed属性来判断,不出意料结果还真的能实现,所以,今天抽空好好整理下资料。
Form.Close()方法
调用Form.Close(),则该对象中创建的所有资源都关闭并释放窗体,将会执行Form.Dispose(bool disposing)方法。 (注:使用Show()方法显示的窗体,则将自动调用Dispose,如果使用了其他方法(如ShowDialog)或窗体根本不显示,则必须在应用程序中调用Dispose。)
Control.IsDisposed属性
假如窗体被释放,Control基类的IsDisposed属性为true,相反,IsDisposed属性为false。
Form_Closing事件
如果e.Cancel = true,窗体不会执行Form.Dispose(disposing)方法,Control.IsDisposed属性为fasle;如果e.Cancel=false,窗体会执行Form.Dispose(disposing)方法,那么,Control.IsDisposed属性为true。
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (MessageBox.Show(this, "您確定要退出嗎?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
e.Cancel = true;
return;
}
}
private void close_show_form(Form frm)
{
Form[] MdiChilds = this.MdiChildren;
if (MdiChilds.Length == 1)
{
MdiChilds[0].Close();
if (!MdiChilds[0].IsDisposed)
return;
}
frm.MdiParent = this;
frm.WindowState = FormWindowState.Maximized;
frm.Show();
}
因此,判断Control.IsDisposed属性就可以知道是否需要切换窗体。
用户点“否”,则不切换窗体,点“是”,则切换窗体。