FormClosing事件添加对话框重复执行的问题
2011-11-07 23:13
316 查看
在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
相关文章推荐
- FormClosing事件添加对话框重复执行的问题 .
- 关于VS2008里面的FormClosing事件内添加对话框后重复执行的问题
- 关于VS2005里面的FormClosing事件内添加对话框后重复执行的问题
- ASPX防止重复执行Page_Load以及事件绑定的问题
- JS动态添加元素及绑定事件造成程序重复执行解决
- 动态生成的html绑定click事件没有效果不执行 click事件重复绑定问题
- Jq中click事件重复执行的问题
- jquery click嵌套 事件重复注册 多次执行的问题解决
- jquery click嵌套 事件重复注册 多次执行的问题解决
- 【C#】AddHandler可重复多次添加事件处理器的问题
- jquery的click事件重复执行问题
- Android:解决ExpandableListView中添加button后item项点击事件问题
- 重复addEventListener("事件名",的问题
- MFC 程序解决CListCtrl控件点击项重复执行的问题
- jquery中事件重复绑定以及解绑问题
- GridView模板列,如何在后台代码中添加客户端事件,执行sql函数,格式化数据
- 图片轮播添加点击事件遇到的问题
- jquery中绑定click事件重复执行问题
- zTree 异步加载 添加子节点重复问题 .
- for循环内绑定事件的问题(立即执行与延迟执行)。