在ShowDialog()中禁用Alt + F4

时间:2013-05-03 22:24:13

标签: c# dialog

我已经阅读了一些关于禁用 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;
}

但问题是,当我显示对话框时,这不起作用。 该表单仍然在 Alt + 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);

除非我明确说明,否则如何防止新表单被关闭?

1 个答案:

答案 0 :(得分:7)

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();

关闭该表单