禁用Alt + F4关闭窗体的一些常用方法
2011-05-17 17:38
309 查看
我在“多线程: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
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
相关文章推荐
- 网吧 开始-》运行 被禁用之破解方法大全,附:一些常用的DOS命令及注册表命令
- 关于winForm窗体禁用关闭按钮的使用方法及禁用最大化、最小化窗口
- winform 窗体禁用关闭按钮的三种方法
- C#禁用双击窗体图标关闭窗体的方法
- 如何实现“WinForm窗体禁用关闭按钮”方法功能及源代码
- Winform窗体关闭按钮禁用(失效)的四种方法
- 时间日期工具类 封装工作中常用的一些时间日期计算方法(转+自己修改)
- JOptionPane类提示框的一些常用的方法
- C#禁用窗体的关闭按钮
- 一些常用的js取时间的方法
- FTL页面常用到的一些方法combobox、combotree、datagrid
- VC中的一些常用方法(20条)
- jquery项目中一些比较常用的简单方法
- java例程练习(String类的一些常用方法)
- VB的一些项目中常用的通用方法-一般用于验证类
- Maven常用到的一些方法
- Java常用的一些多媒体文件基本操作方法简介
- OC NSString 的一些常用方法
- Jquery一些常用方法区分
- 常用JSP文件上传,下载的一些方法