禁用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,如需转载请自行联系原作者


相关文章
|
6月前
QT取消标题栏,如何实现窗口移动
QT取消标题栏,如何实现窗口移动
|
开发者
jeDate日期控件的使用以及选中后点确定按钮关闭功能
jeDate日期控件的使用以及选中后点确定按钮关闭功能
156 0
Win11 右键菜单 样式 模式修改
创建文本文件 复制代码 修改后缀 .bar 双击运行
170 0
Qt [GC9-7]:控制台基本设置及增加鼠标右键菜单和键盘事件
Qt [GC9-7]:控制台基本设置及增加鼠标右键菜单和键盘事件
356 0
Qt [GC9-7]:控制台基本设置及增加鼠标右键菜单和键盘事件
在C#中设置窗体最前,并且如果不关掉这个窗体,就不能操作其余的控件
窗口名 新窗口名 = new 窗口名();新窗口名.ShowDialog();
478 0
|
C# Windows
C# 程序关闭托盘图标不会自动消失
原文:C# 程序关闭托盘图标不会自动消失 c#程序关闭托盘图标不会自动消失,进程的托盘图标却不能随着进程的结束而自动消失  必须将鼠标移到图标上面时才能消失?  请问如何才能做到图标随着进程的结束而自动消失呢(外部强行结束,如在任务管理器将其结束), windows系统好多程序都会这样。
1274 0
|
C# Windows
WPF 窗体中获取键盘和鼠标无操作时的超时提示
原文:WPF 窗体中获取键盘和鼠标无操作时的超时提示 通过调用Windows API中的GetLastInputInfo来获取最后一次输入的时间 using System;using System.
896 0