在ShowDialog中禁用Alt + F4()

问题描述:

我已阅读了一些关于禁用的文章Alt + F4并且到目前为止,已将其部分运行。在ShowDialog中禁用Alt + F4()

目前,我有这个我的主要形式,而它的只允许当我把它需要被关闭的形式非常出色..

private void Alerter_FormClosing(object sender, FormClosingEventArgs e) 
{ 
    if (_altF4Pressed) 
    { 
     if (e.CloseReason == CloseReason.UserClosing) 
      e.Cancel = true; 
     _altF4Pressed = false; 
    } 
} 

private void Alerter_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Alt && e.KeyCode == Keys.F4) 
     _altF4Pressed = true; 
} 

的问题然而,就是这样做当我显示对话框时不起作用。 该表格仍然关闭替代 + F4,这是必不可少的,因为这给用户提供了一种避开过程和程序的方法。

目前,我的警报形式被称为使用;

public static DialogResult show(string param) 
    { 
     thisParam = param; 

     using (Alerter alert = new Alerter()) 
     { 
      if (alert.ShowDialog() == DialogResult.OK) { return DialogResult.OK; } 
      else { return DialogResult.Cancel; } 
     } 
    } 

和我的主窗体使用它调用它;

Alerter.show(rxLine); 

如何防止新窗体被关闭?除非我明确告诉它?

+2

关闭表格。为什么在地球上你会** ** EVER **想要这个? ALT + F4被用作最后的手段。 Whaat是你写的,是病毒吗? – 2013-05-03 22:30:45

+1

必须同意@ofstream:几乎没有任何情况适用于您的用户。如果他们希望你的对话不受阻碍,他们会*以某种方式避开它。如果你给他们关闭的能力(以及“你确定吗?”对话框),那么他们会使用它。如果你*不*,那么他们会对你感到恼火,然后使用任务管理器来终止这个过程。 – dlev 2013-05-03 22:46:03

+0

虽然我可以理解谨慎..不,我没有写病毒,实际上它远离它。我正在写一个升级到现有的定制应用程序,其目的是通知最终用户产品召回并强制确认通知。然后,签名人负责执行回收操作。我们还构建用户使用的计算机..并锁定不需要的访问,以防止诸如数据库的关键进程被篡改。 – 2013-05-04 00:04:23

How can I prevent a user from closing my C# application?,你可以这样做:

protected override CreateParams CreateParams 
{ 
    get 
    { 
     const int CS_NOCLOSE = 0x200; 

     CreateParams cp = base.CreateParams; 
     cp.ClassStyle |= CS_NOCLOSE; 
     return cp; 
    } 
} 

无需跟踪键或取消该事件的FormClosing闭幕。此外,拐角处的关闭按钮将被禁用,但仍然可以使用this.Close();