在Closing事件中,将e.Cancle设置成true,则Windows无法关机和重启系统的解决办法

最近在设计一个WinForm程序的时候遇到一个bug,就是From1窗体的关闭事件中设置了e.Cancle设置成true,导致系统无法关机重启,windows7 和windows xp都是这样。

小Q截图-20150903175032

我这里设计的是当用户点击窗体的叉叉,不关闭窗体,而是最小化窗体,但当系统重启的时候,发现无关关机重启了,这里的解决办法是通过判断CloseReason的枚举值,来搞清楚到底是用户自己关闭或是系统引起的窗体关闭。关键代码如下:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
		{
            //当用户点击叉叉的时候,如果不是由系统关机引起的,那么就最小化窗体
            if (e.CloseReason != CloseReason.WindowsShutDown)
            {
                e.Cancel = true;

                this.WindowState = FormWindowState.Minimized;
            }else
            {
                e.Cancel = false;
            }
		}

 

在菜单中,另外写代码实现窗体关闭退出。

private void 退出ToolStripMenuItem_Click(object sender, EventArgs e)
		{
			notifyIcon1.Visible = false;
			this.Close();
			this.Dispose();
			Environment.Exit(0);

		}

这样,既可以让自己的窗体点击叉叉的时候最小化,而又不至于阻断系统的关机重启。

转载于:https://www.cnblogs.com/caianhua/p/4780480.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值