【问题标题】:Disable Alt + F4 in ShowDialog()在 ShowDialog() 中禁用 Alt + F4
【发布时间】:2013-05-03 22:24:13
【问题描述】:

我已经阅读了几篇关于禁用 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);

除非我明确告诉它,否则我怎样才能防止新表单被关闭?

【问题讨论】:

  • 为什么你会永远想要这个? ALT+F4 用作最后的手段。你在写什么,病毒?
  • 必须同意@ofstream:几乎没有任何情况适合对您的用户执行此操作。如果他们希望您的对话不碍事,他们以某种方式将其排除在外。如果您为他们提供关闭的功能(以及“您确定吗?”对话框),那么他们将使用它。如果你,那么他们会生你的气,然后无论如何都要使用任务管理器杀死进程。
  • 虽然我能理解这种谨慎......不,我不是在写病毒......实际上远非如此。我正在编写对现有定制应用程序的升级,其目的是通知最终用户产品召回并强制确认通知。然后,签字人负责采取行动召回。我们还构建用户使用的机器。并锁定不需要的访问,以防止数据库等关键进程被篡改。

标签: c# dialog


【解决方案1】:

来自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();关闭表单

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-16
    • 2010-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多