在我的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中的一个已知问题。
答案 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窗体应用程序中尝试此代码。