子表单关闭时父表单关闭

时间:2011-05-23 00:39:37

标签: c# forms event-handling

在我的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中的一个已知问题。

3 个答案:

答案 0 :(得分: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 :(得分:1)

这也可以由来自docs

的孩子来处理
  

如果表格中有任何孩子或拥有   表单,FormClosing事件也是   为每个人筹集资金。如果有的话   表格取消了活动,没有   表格已关闭。因此   相应的FormClosed事件是   没有发送到任何表格。

答案 2 :(得分: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窗体应用程序中尝试此代码。