我在“多线程: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,如需转载请自行联系原作者

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

  1. 能够关闭并退出计算机程序的是,电脑强制关闭程序按哪三个键 可按Alt+F4关闭当前页面...

    导读:说到程序,大多数人都知道,有人问电脑突然死机强制关机打不开,还有朋友想问电脑强制关闭程序按哪三个键,这到底是咋回事?事实上电脑qq怎么强制关闭呢,今天小编给大家整理了电脑强制关闭程序按哪三个键, ...

  2. 计算机关闭窗口可以使用alt,禁止使用Alt+F4关闭窗口完整代码

    声明: Private Declare Function GetSystemMenu Lib "user32" Alias "GetSystemMenu" (B ...

  3. 【Qt】按键事件:Alt+F4

    1.问题描述 在嵌入系统上,运行Qt程序,使用Alt+F4关闭时,这个常用的组合快捷键失效. 2.解决方法 在Qt程序中,添加Alt+F4组合按键事件,代码如下: void MainWindow::k ...

  4. winform屏蔽Alt+F4组合键以防止用户关闭对话框

    winform屏蔽Alt+F4组合键以防止用户关闭对话框,屏蔽Alt + F4的方法有很多,这里列出了一个比较简单而奏效的方法. 1. 捕获窗体的KeyDown事件 给窗体添加KeyDown事件,然后 ...

  5. C#挂机锁(禁用任务管理器,禁用windows键和组合键alt+f4等等)

    话不多说,直接上菜! using System; using System.Collections.Generic; using System.ComponentModel; using System ...

  6. VB怎样屏蔽 Alt+F4键

    怎样屏蔽 Alt+F4键 以下代码在模块------------ 程序代码: 'http://baidu.bhdata.com '石陆软件屋 Public Declare Sub mouse_even ...

  7. FineUI小技巧(4)关闭窗体那些事

    前言 FineUI中的Window控件常用作选择.新增或编辑内容.而关闭Window控件却有很多技巧,了解这些技巧有助于项目的快速开发. 如何关闭Window控件 第一个问题就是如何关闭Window控 ...

  8. 屏蔽 Alt+F4 和 Escape 键

    近日写个程序,后台线程执行时需要显示个进度窗口,而这个窗口我又不希望用户自己关闭,所以想办法要屏蔽 Alt+F4 和 Escape 这两个消息. 一般情况下,马上想到的就是处理 WM_KEYDOWN ...

  9. Qt 屏蔽Alt + F4 组合键

    Qt 屏蔽Alt + F4 组合键 2017年11月16日 10:10:29 linuxwuj 阅读数 2006更多 分类专栏: qt 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版 ...

最新文章

  1. [Z]应试生涯结束后,美国亚裔的那群超优生都过得如何?来源: 李璐瑶的日志...
  2. js获取本周、本月、本季、本年的第一天
  3. ExtAspNet v3.1.1
  4. 一篇特别长的总结(C专家编程)
  5. 配置多个git账号_docker随手笔记第七节 jenkins通过git部署java微服务插件安装
  6. mysql geocode_百度地图Geocoding API获取特定地区或地址的经纬度信息,然后在MySql数据库多表循环遍历更新...
  7. 为什么python删除不了_为什么python的imp.reload()不会删除旧的类和函数?
  8. Apprenda发布Kubernetes商业版,PaaS、CaaS任君选择
  9. 软件开发:到底谁还在传言软件巨头濒临死亡?
  10. matlab2c使用c++实现matlab函数系列教程-flipud函数
  11. Atitit io读取文件法 目录 1. 文件法 1 1.1. 异步读取文件: 1 1.2. 2.同步读取方法 1 1.3. 二进制读文件: 1 2. 读取api规范 1 3. Atitit 按照
  12. 可视化网络监控软件OpManager获选″IT运维产品之星”
  13. 助推建筑业数字化转型升级,紫光云再出招
  14. python中的while语句
  15. STM32CUBEIDE(15)----移植兆易创新SPI Nor Flash之GD25Q64Flash
  16. thinkphp6项目的支付宝手机网页支付接入
  17. GSM模块_常用AT指令详解
  18. 广东高中生多少人_2020年广东高考报名人数统计有多少人
  19. 电商交易之订单中心设计(一)
  20. 2018春招实习笔试面试总结(PHP)

热门文章

  1. java 打印hashmap值_HashMap中输出key-value值得方法
  2. python pdb调试快捷键_python pdb调试以及sublime3快捷键设置
  3. machinery入门看这一篇(异步任务队列)
  4. 项目添加universal link跳转,升级微信SDK
  5. ob_get_contents()函数的用法
  6. SpringMVC从Controller跳转到另一个Controller
  7. 系统设计面试的答题思维框架
  8. 客户端能不等四次挥手就强制关闭 TCP 连接吗?
  9. Go语言操作MySQL的基础知识
  10. 《Go语言程序设计》读书笔记(二)函数