在VS2005里面使用VS2003下的Form.Closing事件,因为VS2005里面不直接提供原Closing事件。所以找了一下,已经改为FormClosing了。
现在问题出来了。在VS2003里面的:
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> private void MainForm_Closing( object sender, FormClosingEventArgs e) { if (MessageBox.Show( " 你确定要退出本系统吗? " , " 退出 " , MessageBoxButtons.OKCancel, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2) == DialogResult.OK) { LogoutSystem.Logout(); Application.Exit(); } else { WriteLogger.WriteLog( " 退出系统 " , " 退出系统被用户取消 " , " 取消 " ); e.Cancel = true ; } }
是正常的。但2005里面它会执行两次弹出对话框的操作。用F11键进行跟踪后,发现原来是Application.Exit();事件在作怪。
在执行到它的时候,它会再次执行MainForm_Closing整个事件。所以弹出两次对话框。
一个简单的方法。把Application.Exit();改为Application.ExitThread();就可以了。
另外,你也可以通过判断FormClosingEventArgs e参数的关闭原因来做相应的操作,
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> private void MainForm_FormClosing( object sender, FormClosingEventArgs e) { if (e.CloseReason == CloseReason.UserClosing ) { if (MessageBoxEx.Show( " 您确定退出吗? " , " 退出对话框 " , MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { ...... } else { e.Cancel = true ; } } }
注意:你手动点窗口的“X”关闭按钮或者程序里面使用this.Close(),那么 FormClosingEventArgs 的关闭原因就是 CloseReason.UserClosing