发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
通常,我们把它写在FormClosing 事件中,如果确定关闭,就关闭;否则把FormClosingEventArgs 的 Cancel 属性设置为 true,就取消了该窗体的关闭。
如果该窗体是主窗体,我们想在该窗体关闭时关闭整个应用程序,会遇到至少两种情况:
(1)该窗体同时是启动窗体,即它是应用程序中所有窗体的父类,则整个应用程序会被关闭。
(2)如果该窗体不是启动窗体,比如我们做了一个欢迎窗体,则应用程序中所有窗体的父类就是这个欢迎窗体了。这时该窗体的关闭并不会关闭整个应用程序。我们需要再加入“Application.Exit()”这行代码来退出应用程序。但同时又有问题了,父窗体的关闭又会给该窗体发送关闭事件,于是该事件又被调用一次,确认对话框又会弹出第二次。解决方法是用下面的代码:
注:做欢迎体界面可以在主窗体中,ShowDialog方法打开欢迎界面,而不是把欢迎界面作为启动窗体。下面的方法仅有理论意义。
1 protected override void WndProc(ref Message m) 2 { 3 //Console.WriteLine(m.Msg); 4 const int WM_SYSCOMMAND = 0x0112; 5 const int SC_CLOSE = 0xF060; 6 if (m.Msg == WM_SYSCOMMAND && (int)m.WParam == SC_CLOSE) 7 { 8 //捕捉关闭窗体消息 http://www.cnblogs.com/sosoft/ 9 //用户点击关闭窗体控制按钮 注释为最小化窗体 10 //this.WindowState = FormWindowState.Minimized; 11 12 //窗体隐藏 13 this.Hide(); 14 return; 15 } 16 base.WndProc(ref m); 17 }
***************************************************************************************************************
C# 窗体关闭时可以触发的事件
FormClosing :在窗体关闭时,FormClosing 事件发生。窗体关闭时,此事件会得到处理,从而释放与此窗体关联的所有资源。如果取消此事件,则该窗体保持打开状态。若要取消窗体的关闭操作,请将传递给事件处理程序的 FormClosingEventArgs 的 Cancel 属性设置为 true。
FormClosed:在用户或 Application 类的 Close 方法或 Exit 方法关闭窗体后,会发生 FormClosed 事件。若要防止窗体关闭,请处理 FormClosing 事件,并将传递给事件处理程序的 CancelEventArgs 的 Cancel 属性设置为 true。可以使用此事件执行一些任务,如释放窗体使用的资源,还可使用此事件保存输入窗体中的信息或更新其父窗体。
当窗体显示为模式对话框时,单击“关闭”按钮(窗体右上角带 X 的按钮)会隐藏窗体并将 DialogResult 属性设置为 DialogResult.Cancel。通过在窗体的 FormClosing 事件的事件处理程序中设置 DialogResult 属性,可以在用户单击“关闭”按钮时重写分配给 DialogResult 属性的值。
注意在显示为无模式窗口的 Form 上调用 Close 方法时,不能调用 Show 方法使窗体可见,因为窗体的资源已被释放。若要隐藏窗体然后又使其可见,请使用 Hide 方法。
如果窗体是多文档界面 (MDI) 父窗体,则在引发 MDI 父窗体的 FormClosing 事件之前将引发所有 MDI 子窗体的 FormClosing 事件。同样,在引发 MDI 父窗体的 FormClosed 事件之前,将引发所有 MDI 子窗体的 FormClosed 事件。取消 MDI 子窗体的 FormClosing 事件不能防止引发 MDI 父窗体的 FormClosing 事件。但是,取消该事件会将作为参数传递给父窗体的 FormClosingEventArgs 类的 Cancel 属性设置成 false。要强制关闭所有 MDI 父窗体和子窗体,请将 MDI 父窗体中的 Cancel 属性设置成 false。
下面一个简单例子:
1 private void Form2_FormClosing(object sender, FormClosingEventArgs e) 2 { 3 DialogResult result = MessageBox.Show("你确定要关闭吗!", "提示信息", MessageBoxButtons.OKCancel, MessageBoxIcon.Information); 4 if (result == DialogResult.OK) 5 { 6 e.Cancel = false; //点击OK 7 } 8 else 9 { 10 e.Cancel = true; 11 } 12 }
来自: 昵称10504424 > 《工作》
0条评论
发表
请遵守用户 评论公约
C# 窗体关闭时可以触发的事件C# 窗体关闭时可以触发的事件。如果窗体是多文档界面 (MDI) 父窗体,则在引发 MDI 父窗体的 FormClosing 事件之前将引发所有 MDI 子窗体的 FormClosing 事件。同样,在引发...
窗体对象(针对 Visual Basic 6.0 用户)
窗体对象(针对 Visual Basic 6.0 用户)在 Visual Basic 6.0 中,窗体的 Moveable 属性可以设置为 False,以防止用户在运行时移动窗体。在 Visual Basic 2005 中,MDI 窗体不再支持 Click、MouseDown...
FormClosing事件的CloseReason枚举
FormClosing事件的CloseReason枚举使用FormClosing事件的CloseReason枚举,有时候能够解决很大的问题,尤其是通过父窗体关闭closing事件为 e.Cancel = true的子窗体时特别有用。MdiFormClosing 此多文...
《C#语言程序设计项目教程》第8章 窗体和常用控件写字字帖
选填
三层-规范化登陆窗口 195
首先要简单说下窗体程序的运行过程,窗体程序与控制台程序一样都是从一个静态的Main()方法中开始,此方法在项目下面的一个Program类中,双...
在查询和报表中使用参数 - Access - Microsoft Office
在查询和报表中使用参数 - Access - Microsoft Office在查询和报表中使用参数。创建"Sales By Category Summary Query"参数窗...
VB 各个窗口属性对应的中文术语_蓝心雨的空间
如果希望窗体有边框而没有标题栏、控制菜单框、最大 化按钮和最小化按钮,则应从窗体 Caption 属性中删除任何文本,同时将窗体的 ControlBox、 MaxButton 和 MinButton 属性设置为 False。▲Load o...
C#控件一览表 前所未有的震撼(太详细了)
窗体也是一种容器控件。所谓容器控件指的是这样一种情况:往往在控件之中还有一个控件,例如最典型的就是窗体控件中会包含很多的控件,像标签控件、文本框等。3、TextBox 控件 1、主要属性: (1)Text...
C#程序设计简明教程-第4章_window窗体开发
第4章window窗体开发考虑windows控件时主要考虑控件的属性和事件,事件一般对应有个方法,方法.而属性一般为:名字,文字,外观,是否有效(选中),是否可视等等.一、常用控件1单选按钮(RadioButton)单选按钮...
微信扫码,在手机上查看选中内容