2011-05-23 147 views
5

在我的C#应用​​程序中,当主窗体关闭时,我调用以下方法。子窗体关闭时父窗体关闭

private void FormMain_Closing(object sender, FormClosingEventArgs e) 
{ 
     // Show this dialog when the user tries to close the main form 
     Form testForm = new FormTest(); 
     testForm.StartPosition = FormStartPosition.CenterParent; 
     testForm.ShowDialog(); 
} 

这会创建一个对话框窗口,显示主窗体何时关闭。但是,我的问题是,当用户关闭testForm时,主表单会立即关闭。我已经尝试过各种各样的e.Cancel = true;等变体,并且仍然无法取消主窗体关闭。

任何想法?


编辑:它看起来像我遇到连续使用两个ShowModal()的一个问题。展望这个问题...


编辑:使用this.DialogResult = DialogResult.None;它似乎已经解决了我的问题。从模态对话框打开模态对话框时,显然是WinForms中的一个已知问题。

+1

我建议你把你的解决方案放在你的问题的答案中,并将其标记为正确的答案。通过这种方式,其他人就会知道这个问题已经得到了回答 - 同时也看到您为解决问题所做的一切。 – Mel 2011-05-23 01:25:39

回答

2

此代码适用于我。我认为你的代码的另一部分存在问题。

private void Form1_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    Form testForm = new FormTest(); 
    testForm.StartPosition = FormStartPosition.CenterParent; 
    testForm.ShowDialog(); 

    e.Cancel = testForm.DialogResult == DialogResult.Cancel; 
} 
1

这可以由孩子们太从docs处理:

如果一个表单有任何儿童或拥有 形式,一个事件的FormClosing也 提出的每一个。如果任何一个 表单取消该事件,则不会关闭任何 表单。因此,相应的FormClosed事件 是 不发送到任何窗体。

1

我知道你在你的问题中提到你曾尝试使用'e.Cancel = true'但是,下面的代码工作在我的环境(.NET 4.0,Visual Studio 2010中,Windows 7中):

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { 
    // Show this dialog when the user tries to close the main form 
    Form testForm = new FormTest(); 
    testForm.StartPosition = FormStartPosition.CenterParent; 
    testForm.ShowDialog(); 
    e.Cancel = true; 
} 

如果你的情况不工作,你可以在工作中有其他的事件处理程序。在这种情况下,请在新生成的Windows窗体应用程序中尝试此代码。

+0

此外,.NET 4.6,VS 2015,Win 7(经过将近6年后,您将得到一个投票:)注意,您需要跟踪任何已打开的子表单的结果[s]。 – 2017-03-08 20:08:07