FormClosing事件添加对话框重复执行的问题

本文介绍了在Visual Studio 2005中遇到的一个问题,即使用从Visual Studio 2003继承的Form.Closing事件时,在执行Application.Exit();后事件会重复触发两次。解决方案包括将Application.Exit();替换为Application.ExitThread();,或通过判断FormClosingEventArgs参数的关闭原因来避免重复触发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值