【发布时间】:2017-06-17 11:16:50
【问题描述】:
我有一个简单的 WinForm 应用程序,我在其中定义了 OnFormClosing 的覆盖,以便能够要求退出确认并关闭 sql 连接。
它看起来像这样:
protected override void OnFormClosing(FormClosingEventArgs e)
{
switch (MessageBox.Show(this, "Really quit " + Application.ProductName + "?",
Application.ProductName, MessageBoxButtons.YesNo,
MessageBoxIcon.Exclamation))
{
case DialogResult.Yes:
con.Close();
Debug.WriteLine("Connection Closed");
Debug.WriteLine("Exiting Application");
Application.Exit();
break;
default:
break;
}
}
不幸的是,当我关闭表单时,“真正退出”对话框会弹出两次。 为什么会这样?
【问题讨论】:
-
在 OnFormClosing() 中放置一个断点,然后单击第一个 X 按钮,然后单击退出菜单以检查两个调用的调用堆栈,并查看对 OnFormClosing() 的所有调用(哪些方法) ) 方法来了..
-
我的代码中存在另一个问题,已解决问题。无论我从哪里调用,really-quit-dialog 都会弹出两次。
-
我不太确定如何读取调用堆栈,但我认为第二次从 Application.exit() 方法调用它
-
表单关闭事件处理程序中有一个FormClosingEventArgs e参数,在'Application.Exit()'行之前设置
e.Cancel = false并验证消息框只出现一次。您还可以在调试模式下检查 e.CloseReason 属性以获取指示表单关闭原因的值。 -
另外,我认为如果你设置
e.Cancel = false;,应该不需要写Application.Exit()。请验证..
标签: c# winforms formclosing