Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在CloseReason.UserClosing窗体上显示关闭对话框2次

在CloseReason.UserClosing窗体上显示关闭对话框2次
EN

Stack Overflow用户
提问于 2013-01-23 16:06:46
回答 1查看 1.7K关注 0票数 2

我想要显示对话框,当用户试图关闭应用程序(红色窗口十字和按钮在我的窗体),但当窗口关闭时,此对话框阻止关闭,所以我想要由应用程序检测何时窗口关闭,并继续没有对话框。以下是我的代码

在表单加载之后,我捕捉到了关闭事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        switch (e.CloseReason)
        {
            case CloseReason.UserClosing:
                if (MessageBox.Show("Do you want to exit the application?", "Your App", MessageBoxButtons.YesNo) == DialogResult.No)
                    {
                        e.Cancel = true;
                    }
                break;
            case CloseReason.WindowsShutDown:
                e.Cancel = false; //this is propably dumb
                break;
            default:
                break;
        }
    }

但当用户关闭应用程序时,对话框显示2次。第一个对话框不执行任何操作,第二个对话框之后执行操作。当windows关闭(因为windows正在等待我的应用程序关闭)时,我如何才能显示关闭对话框一次而没有对话框?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-23 16:49:24

编写此代码的更好方法(我的意见)是不订阅表单事件,而是使用可用的覆盖方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected override void OnFormClosing(FormClosingEventArgs e)
{
  switch (e.CloseReason)
  {
    case CloseReason.UserClosing:
      if (MessageBox.Show("Do you want to exit the application?", "Your App", MessageBoxButtons.YesNo) == DialogResult.No)
      {
        e.Cancel = true;
      }
      break;
    case CloseReason.WindowsShutDown:
      e.Cancel = false; //this is propably dumb
      break;
    default:
      break;
    }

  base.OnFormClosing(e);
}

您可能希望考虑仅使用if (e.CloseReason == CloseReason.UserClosing),而不是基于其当前格式的switch语句。默认情况下,e.Cancel已经是False,所以您不需要显式地设置它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14484008

复制
相关文章
窗体显示
这个是可以点击的 主要是没有那个事件绑定所以没有啥事只有点击之后啥都没有啦 我每一部分都用的一个主程序 所以看着会比较乱但是不影响复习 源代码奉上
用户8447427
2022/08/18
1.4K0
窗体显示
PyQt5 技巧篇-如何让窗体只显示关闭按钮
默认我们的窗体的放大、缩小、关闭按钮都是显示的,想要个性化化显示,需要我们自己设置。
小蓝枣
2020/09/23
2.8K0
在Office应用中打开WPF窗体并且让子窗体显示在Office应用上
在.NET主程序中,我们可以通过创建 ExcelApplication 对象来打开一个Excel应用程序,如果我们想在Excle里面再打开WPF窗口,问题就不那么简单了。 我们可以简单的实例化一个WPF窗体对象然后在Office应用程序的窗体上打开这个新的WPF窗体,此时Office应用的窗体就是WPF的宿主窗体。然后宿主窗体跟Office应用并不是在一个UI线程上,子窗体很可能会在宿主窗体后面看不到。这个时候需要调用Win32函数,将Office应用的窗体设置为WPF子窗体的父窗体,这个函数的形式定义如下
用户1177503
2018/05/03
1.7K0
c++创建对话框_窗体边框改为对话框样式
本例中将涉及到对话框标题栏的自绘,双缓冲位图的显示以及位图按钮类的使用。
全栈程序员站长
2022/11/07
1.4K0
显示打印对话框
Montaque(Rain + Man=Rainman)  http://search.csdn.net/Expert/topic/1756/1756799.xml?temp=.8004572 加
Java架构师必看
2021/03/22
1.1K0
设置WPF窗体全屏显示:
//全屏代码: private void Window_Loaded(object sender, RoutedEventArgs e) { // 设置全屏 this.WindowState = System.Windows.WindowState.Normal; this.WindowStyle = System.Windows.WindowStyle.None; this.ResizeMode = System.Windows.ResizeMode.NoResize;
hbbliyong
2018/03/05
3.9K0
关闭对话框,OnClose和OnCancel
我们知道,在对话框中,屏蔽ESC键自己主动退出能够选择重载OnCancel为哑函数的方法:
全栈程序员站长
2022/07/12
1.1K0
代码分享:高亮显示鼠标移动到的用户窗体上的控件
这是在vbaexpress.com上找到的一段代码,非常有意思,当鼠标移动到用户窗体中的控件上时,该控件会高亮显示。这可以让我们将用户窗体界面设计得更好。
fanjy
2022/06/04
1.1K0
代码分享:高亮显示鼠标移动到的用户窗体上的控件
将jpeg图片显示在framebuffer上
点击(此处)折叠或打开 /************************************************** * example5.c * Author: T-bagwell * * Compile:gcc -Wall example5.c -o example5 *************************************************/ #include <stdio.h> #inclu
用户3765803
2019/03/05
1.2K0
golang版本sdl2显示窗体
go用syscall调用sdl2,在win10 x64上没问题,其他系统不敢保证。
福大大架构师每日一题
2023/06/08
2840
golang版本sdl2显示窗体
PyQt5 技巧篇-参数控制窗体右上角只显示关闭按钮实例演示
默认我们的窗体的放大、缩小、关闭按钮都是显示的,想要个性化化显示,需要我们自己设置。
小蓝枣
2022/05/07
3220
PyQt5 技巧篇-参数控制窗体右上角只显示关闭按钮实例演示
golang版本sdl2显示窗体
go用syscall调用sdl2,在win10 x64上没问题,其他系统不敢保证。
福大大架构师每日一题
2022/06/14
6570
golang版本sdl2显示窗体
winform渐变窗口显示/关闭
//渐渐的消失 for (int iNum = 10; iNum >= 0; iNum --) { //变更窗体的不透明度 this.Opacity = 0.1 * iNum; //暂停 System.Threading.Thread.Sleep(100); } //渐渐的显示 for (int iNum = 0; iNum <= 10; iNum ++) { /
跟着阿笨一起玩NET
2018/09/18
4.5K0
winfrom向窗体中拖放图片并显示
首先要设置窗体的AllowDrop属性为true。然后在窗体的DragEnter事件中添加如下代码:调用自定义的显示图片的方法。
跟着阿笨一起玩NET
2018/09/19
9340
c# winform 窗体失去焦点关闭(钩子实现)
main函数里面写 Application.ApplicationExit += Application_ApplicationExit;
冰封一夏
2019/09/10
2.9K0
WinForm自动记录从上次关闭位置启动窗体
功能主要是通过在注册表中读写窗体的Location属性来实现的。在窗体关闭前处理窗体的FormClosed事件,将窗体的Location属性值写入注册表,然后在窗体的Load事件中从注册表中读取保存的数据。 (1)Location属性 Point结果,表示窗体的左上角相对桌面的 左上角的坐标。 (2)读写注册表 c#中对注册表进行读写,主要是通过RegistryKey类的GetValue和SetValue方法来实现的。 代码 /// <summary> /// 窗体加载时获取窗体上次结束时的位置 //
跟着阿笨一起玩NET
2019/07/31
1.2K0
如果在BackgroundWorker运行过程中关闭窗体…
在Windows Form应用中,BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方便地解决问题。由于操作是异步执行的,用户可能在异步操作执行过程中关闭当前窗体,而窗体的关闭会伴随着Dispose方法的执行。如果我们注册了BackgroundWorker的RunWorkerC
蒋金楠
2018/02/07
1.3K0
如果在BackgroundWorker运行过程中关闭窗体…
C# WPF MVVM模式下在主窗体显示子窗体并获取结果
在winform中打开一个新的子窗体很简单,直接实例化窗体并show一下就可以:
用户9127601
2021/11/01
1.8K0
c#子窗口与父窗口_主窗体控制子窗体的显示
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170914.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/23
2.6K0
点击加载更多

相似问题

关闭对话框窗体关闭父窗体

31

窗体关闭对话框结果显示在所有窗体中。

12

对话框窗体在错误后关闭。

15

如何防止窗体关闭并显示确认对话框?

23

jqgrid -关闭窗体对话框

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文