禁用Alt + F4关闭窗体的一些常用方法-阿里云开发者社区

开发者社区> 浣熊干面包> 正文

禁用Alt + F4关闭窗体的一些常用方法

简介:
+关注继续查看

我在“多线程:C#.NET中使用BackgroundWorker在模态对话框中显示进度条”一文中介绍了如何创造一个能实时显示程序处理进度的对话框,为了让该对话框看起来更加逼真,除了要将窗体的的FormBorderStyle属性设为FixedDialog,将MaximizeBox和MinimizeBox设为false,将ControlBox设为false外,还需要屏蔽Alt + F4组合键以防止用户关闭对话框。屏蔽Alt + F4的方法有很多,这里列出了一个比较简单而奏效的方法。

1. 捕获窗体的KeyDown事件

  给窗体添加KeyDown事件,然后加入下面的代码:

复制代码
1 private void Form2_KeyDown(object sender, KeyEventArgs e)
2 {
3     if (e.KeyCode == Keys.F4 && e.Modifiers == Keys.Alt)
4     {
5         e.Handled = true;
6     }
7 }
复制代码

  代码中判断当前用户是否按下了Alt + F4组合键,如果是则执行e.Handled = true用于指示事件已经被成功执行,从而屏蔽了系统的Alt + F4功能。

2. 改写窗体的Closing事件

  给窗体添加Closing事件,然后加入下面的代码:

1 public void Form2_FormClosing(object sender, FormClosingEventArgs e)
2 {
3     e.Cancel = true;
4 }

  当窗体被关闭时(用户点击窗体右上角的关闭按钮或通过程序调用窗体的Close()方法)关闭动作会被取消,那么如何才能通过程序来关闭窗体呢?可以在关闭窗体的代码前去掉窗体的Closing事件,如:

1 this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
2 this.Close();

  当然,你也可以选择不关闭窗体而只是隐藏它,这样该窗体不会在内存中被注销。上面两行代码只能在窗体内部运行,如果你想实现在父窗体中通过程序关闭子窗体,可以在子窗体中添加一个public类型的方法,将上面两行代码加入到方法中,然后在父窗体中调用子窗体的这个方法。如:

主窗体:

1 Form2 frm = new Form2();
2 frm.CloseWindow();

子窗体:

复制代码
 1 private void Form2_FormClosing(object sender, FormClosingEventArgs e)
 2 {
 3     e.Cancel = true;
 4 }
 5 
 6 public void CloseWindow()
 7 {
 8     this.FormClosing -= new FormClosingEventHandler(this.Form2_FormClosing);
 9     this.Close();
10 }
复制代码

3. 调用COM组建或全局钩子

  这类方法需要借助于第三方的代码来实现,过程稍微复杂一些,不太推荐使用,可考虑在一些比较特殊的场合使用。这里有两个例子可供参考:

http://zhidao.baidu.com/question/54482219

http://www.cnblogs.com/hbz253638398/archive/2008/05/30/1210971.html


本文转自Jaxu博客园博客,原文链接:http://www.cnblogs.com/jaxu/archive/2011/05/17/2049083.html,如需转载请自行联系原作者


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
4146 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
4615 0
阿里云服务器安全组设置内网互通的方法
虽然0.0.0.0/0使用非常方便,但是发现很多同学使用它来做内网互通,这是有安全风险的,实例有可能会在经典网络被内网IP访问到。下面介绍一下四种安全的内网互联设置方法。 购买前请先:领取阿里云幸运券,有很多优惠,可到下文中领取。
9513 0
阿里云论坛BBS关闭停止运营了?
阿里云BBS论坛(https://bbs.aliyun.com/)停止运营了,新手站长感到很遗憾,不清楚什么原因: 阿里云开发者论坛关闭通知 阿里云论坛关闭了,以后大家都来云栖社区吧。 亲爱的论坛用户: 阿里云BBS论坛(https://bbs.aliyun.com/)自2011年7月上线,至今已经近8年。
1972 0
阿里云论坛关闭(停止运营)——遇到问题该如何反馈、交流?
就在刚刚,阿里云官方发出贴告,阿里云论坛要关闭了~
1819 0
阿里云ECS云服务器初始化设置教程方法
阿里云ECS云服务器初始化是指将云服务器系统恢复到最初状态的过程,阿里云的服务器初始化是通过更换系统盘来实现的,是免费的,阿里云百科网分享服务器初始化教程: 服务器初始化教程方法 本文的服务器初始化是指将ECS云服务器系统恢复到最初状态,服务器中的数据也会被清空,所以初始化之前一定要先备份好。
3664 0
941
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载