C# MDI父级的OnFormClosing方法
每当我单击红色的X按钮关闭MDI父窗体时,它首先调用MDI子窗体的所有OnFormClosing方法,然后调用MDI父窗体的OnFormClosing方法。但是,在MDI父级的OnFormClosing方法中,我可以编写C# MDI父级的OnFormClosing方法,c#,.net,winforms,C#,.net,Winforms,每当我单击红色的X按钮关闭MDI父窗体时,它首先调用MDI子窗体的所有OnFormClosing方法,然后调用MDI父窗体的OnFormClosing方法。但是,在MDI父级的OnFormClosing方法中,我可以编写e.Cancel=true代码中的某个地方。在这种情况下,它不应该调用MDI子窗体的OnFormClosing方法 1-)是否有办法确保关闭MDI父窗体不会触发MDI子窗体的OnFormClosing方法 2-)是否有MDI子窗体的方法,以便在我关闭该子窗体时调用此方法,而在我关
e.Cancel=true代码>代码中的某个地方。在这种情况下,它不应该调用MDI子窗体的OnFormClosing方法
1-)是否有办法确保关闭MDI父窗体不会触发MDI子窗体的OnFormClosing方法
2-)是否有MDI子窗体的方法,以便在我关闭该子窗体时调用此方法,而在我关闭其父窗体时不会调用此方法?我猜您无法控制它,如此处所述
如果表单是多文档界面(MDI)父表单,则
在MDI之前引发所有MDI子窗体的FormClosing事件
引发父窗体的FormClosing事件。同样地,表格也关闭了
在FormClosed事件之前引发所有MDI子窗体的事件
将引发MDI父窗体的。正在取消的FormClosing事件
MDI子窗体不阻止MDI的FormClosing事件
父窗体无法被引发。但是,将设置取消事件
要设置FormClosingEventArgs类的Cancel属性
作为参数传递给父窗体。强制所有MDI父级和
要关闭子窗体,请在MDI中将Cancel属性设置为false
父窗体
您可以使用较低级别的方法,并处理窗体的事件:
将此代码放入MDI父窗体。它将在子窗体上的FormClosing
事件之前发生。我不完全理解您为什么要这样做?!你的问题中有些事情甚至是不可能的。你能说得更具体一点吗……这很有效,但当你试图让机器关机时,效果并不好。谢谢你,这是一个很好的解决办法,它解决了我的问题。@HansPassant是的,我同意。我也讨厌程序问我是否确定要退出程序,但这只是一个例子。这种方法的有用性是显而易见的。
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x10) // WM_CLOSE
{
// Process the form closing. Call the base method if required,
// and return from the function if not.
// For example:
var ret = MessageBox.Show("Do you really want to exit?", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (ret == System.Windows.Forms.DialogResult.No)
return;
}
base.WndProc(ref m);
}