问题:
MDI程序,需要屏蔽掉子窗口的关闭按钮,使点击“关闭”时将子窗体隐藏起来为并不真正执行close。采用的方法是在子窗体的closeing事件中使用
e.Cancel = true;
来把关闭事件取消掉,但是问题来了,虽然把子窗体的关闭事件屏蔽了,当单击主窗体的“关闭”按钮时,关闭时间同样被屏蔽了,跟踪以后发现当单击主窗口的“关闭”按钮时,先执行子窗体的close事件,可是子窗体的关闭事件已经被cancel掉了。
解决方法:
1. 给子窗体添加一个bool型公开属性bCanClose,来标识窗体closeing事件发生时,是否是要close()还是要hide()。默认值为false表示要执行hide()。
2. 在主窗体的closeing事件响应函数中将各子窗体的bCanClose的值改为true,在执行个子窗体的close()方法。
代码如下:
子窗体
private void ToolWindow_FormClosing(object sender, FormClosingEventArgs e)
{
if (bCanClose == false) e.Cancel = true;
this.Hide();
}
{
if (bCanClose == false) e.Cancel = true;
this.Hide();
}
主窗体
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
SetAllWinCanClose();
CloseAllWin();
e.Cancel = false;
}
{
SetAllWinCanClose();
CloseAllWin();
e.Cancel = false;
}