2 ok panda gogo Ok_Panda_GoGo 于 2016.01.19 10:55 提问

窗体的Closing事件,里面如果使用Application.Exit(),会弹出两次对话框询问

代码如下,

  private void StartForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (DialogResult.OK == MessageBox.Show("确认退出?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information))

            {
                Application.Exit();
            }
            else
                e.Cancel = true;


        }

而我把Application.Exit()注释掉就正常弹出一次对话框了,新人不解!请大家帮帮忙!

2个回答

lrgdongnan
lrgdongnan   2016.01.19 12:42
已采纳

这个是很正常的,当执行Application.Exit();时,就激活窗体的关闭事件,从而调用该事件的处理程序StartForm_FormClosing,你这样写相当于递归调用
,修改如下:
private void StartForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (DialogResult.Cancel == MessageBox.Show("确认退出?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Information))
{
e.Cancel = true;
}
}

Ok_Panda_GoGo
Ok_Panda_GoGo 谢谢!很详细。
2 年多之前 回复
enpterexpress
enpterexpress   Rxr 2016.01.19 11:10

点击关闭出发关闭事件 一次
事件中,Application.Exit();会再次触发关闭事件 二次

Ok_Panda_GoGo
Ok_Panda_GoGo 回复?_?_?: 明白了,谢谢!
2 年多之前 回复
enpterexpress
enpterexpress 正常了
2 年多之前 回复
Ok_Panda_GoGo
Ok_Panda_GoGo 也就是说Application.Exit();多此一举了?如果去掉它会怎样
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C# 退出对话框 DialogResult 用法 可防止弹出二次的尴尬
昨天晚上在做项目的时候,遇到了点击程序的 退出 菜单时,会弹出二次确认是否退出程序的对话框,后来分析了一下,是因为我在 Closeed 中的代码里也有一段弹出对话框询问是否退出程序的代码,后来经在网上查询,并改善,得来以下代码,可有效防止弹出二次对话框的尴尬!            我在写 Closing的退出事件中原本是这样写的,如下代码: view plainp
解决WinCE开发中滥用Application.Exit();带来的神秘错误!
解决方案: 主窗体中修改子窗体的弹出方式由Show 改为  ShowDialog() 子窗体中的退出按钮将“ Application.Exit();” 改为 “this.DialogResult = DialogResult.OK;”
WPF(MVVM)主窗口关闭时 弹窗提示是否关闭
窗口设置为:   Name="MianPage"         WindowState="Maximized"         Closing="Window_Closing" 在主窗口中: //关闭窗口事件 //不知道与重写窗口关闭事件 OnClosed有什么区别 private void Window_Closing(object sender
WPFwindow窗体的关闭事件Closing 和Closed
当窗口关闭时,它会引发两个事件:Closing 和 Closed。 Closing 在窗口关闭之前引发,它提供一种机制,可以通过这种机制来阻止窗口关闭。 系统会向Closing 事件处理程序传递一个 CancelEventArgs e,该参数实现 Boolean Cancel 属性,将该属性设置为 true 可以阻止窗口关闭。  private void Window_Closing(obje
为何Application.Exit()无法真正退出程序
Application.Exit()只是发出终止的消息,并不立即退出     立即退出可以用Environment.Exit(0)  Application   类具有用于启动和停止应用程序和线程以及处理   Windows   消息的方法。调用   Run   以启动当前线程上的应用程序消息循环,并可以选择使某窗体可见。调用   Exit   或   ExitThread   来停止消息循环
ASP.NET弹出对话框确认
目录点击UpdatePanel中的按钮弹出javascript对话框收藏... 1在UpdatePanel控件内使用Response.Write()弹出对话框... 2ASP.NET弹出对话框确认... 3ASP.NET的GridView 删除确认对话框... 4Gridview 弹出对话框... 4GridView实现自动编号... 5 点击UpdatePanel
退出窗体提示框避免出现两次
避免窗体退出时提示两次, 如果菜单中有退出功能;则退出事件中不能执行Application.exit方法,只能用this.close();  this.dispose()方法执行不成功。 DialogResult diaResult=   MessageBox.Show("请确定是否保存数据","提示框",MessageBoxButtons.YesNo);             i
C# 强制退出WinForm程序之Application.Exit和Environment.Eixt
强制退出WinForm程序之Application.Exit和Environment.Eixt 这几天在做一个把大量Infopath生成的XML数据,进行处理的程序,我用了MDI子窗体,每个窗体包含了各自的功能,如,遍历目录及其子目录检查文件类型并自动生成Sql语句并入库、对Infopath数据的自动检查、对数据中的某些域的替换及更改处理、对数据文件的合并、拆分、剔除记录、统计数据、 对数据
C#窗体退出事件提示对话框解决方案
最近刚刚学习C#,在登录父窗体主界面关闭事件写入代码:                         if (DialogResult.Yes == MessageBox.Show("是否关闭本系统?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information))             {                
怎样在关闭窗体时弹出一个确认对话框,确定再退出?
         private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)           {                 if(MessageBox.Show("确定关闭?","Form",MessageBoxButtons.OKCancel) == DialogResult.Ca