c#程序中,关闭窗口返回参数FormClosingEventArgs e的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#程序中,关闭窗口返回参数FormClosingEventArgs e的问题相关的知识,希望对你有一定的参考价值。

问题是这样的:在FormClosing函数中, 当用户使用任务管理器结束任务时,返回的参数e.CloseReason的值为TaskManagerClosing;当用户点击关闭,程序最小化到托盘,e.CloseReason的值为UserClosing;但是当用户点击关闭,然后双击托盘让程序重新弹出,在使用任务管理器结束任务时,e.CloseReason的值竟然也是UserClosing.请高手帮忙分析下,谢谢

这需要分析啥?因为任务管理器结束任务的时候也是通过函数发送关闭主窗口的消息的,这和用户点击叉叉来关闭是相同的消息,所以你没办法判断的。

如果实在要判断,那就关闭的时候检测一下当前窗口是不是激活的,如果不是那就说明可能是通过其它程序关闭的。
参考技术A e.CloseReason.

C#关闭一个窗口的同时打开另一个窗口

在.net的WinForm程序中,如果是直接起动的Form作为主窗口,那么这个主窗口是不能关闭的,因为它维护了一个Windows消息循环,它一旦关闭了就等于声明整个应用程序结束,所以新打开的窗口也就被自动关闭了。因此要关闭的窗口不能用Application.Run创建。
要在关闭一个窗口的同时打开另一个窗口,可以按如下做法:

先在第一个窗口声明一个公共的bool变量并赋值为true:
 如public bool closeflag = true;
在program类里运行第二个窗口,主要代码:
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Form1 form1 = new Form1();
            form1.ShowDialog();  //模式窗口,先运行Form1的作用
            if (from1.closeflag == false)
            {
                Application.Run(new Form2());
            }

然后在Form1的关闭的相关控件(如按钮或什么的,就是要关闭这个窗口的控件)  将closeflag赋值为false,并调用this.close();关闭第一个窗口。

 

出处:http://www.cnblogs.com/daban/archive/2012/07/06/2579471.html

以上是关于c#程序中,关闭窗口返回参数FormClosingEventArgs e的问题的主要内容,如果未能解决你的问题,请参考以下文章

C# FormClosing FormClosed 区别详解

c# winform程序,判断是不是打开同一个窗口的问题。

C# winForm程序窗体右上角X关闭按钮点击后 弹出提示文本 只有确定按钮点击后程序无法关闭

winform问题,close()方法能关闭窗体吗?谢谢 c#

c#单击关闭按钮事件

C# winform 关闭窗体后在打开 如何让打开的窗体还是原窗体 且打开的窗体还是原状态