6

我希望表单不会通过执行Alt+来关闭,F4但如果Application.Exit()this.Close从同一个表单调用,它应该被关闭。

我试过了CloseReason.UserClosing,但仍然没有帮助。

4

4 回答 4

20

如果您只需要过滤掉Alt+F4事件(留下点击关闭框,this.Close()Application.Exit()像往常一样行事),那么我可以建议以下内容:

  1. 将表单的KeyPreview 属性设置为true;
  2. 连接表单FormClosingKeyDown事件:

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (_altF4Pressed)
        {
            if (e.CloseReason == CloseReason.UserClosing)
                e.Cancel = true;
            _altF4Pressed = false;
        }
    }
    
    private bool _altF4Pressed;
    private void Form1_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Alt && e.KeyCode == Keys.F4)
            _altF4Pressed = true;
    }
    
于 2010-04-15T09:25:58.130 回答
3

您可以通过在Form_Keydown EventHandler 上将SuppressKeyPress属性设置为 true 来轻松完成,如下所示。

        if (e.KeyCode == Keys.F4 && e.Alt)
        {
            e.SuppressKeyPress = true;

        }

有了这个,您还可以通过在同一 eventHandller 或任何其他方式上将 SuppressKeyPress 属性设置为 false 来关闭您的活动表单。

于 2012-05-14T16:06:37.063 回答
0

通过将 Form 的 KeyPreview 属性设置为 true 并覆盖 OnProcessCmdKey 方法来捕获 Alt+F4 热键。

于 2010-04-15T08:23:59.723 回答
0

你是如何使用 CloseReason 的?

请参阅此处的示例代码:http: //msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx

您需要设置传递的 FormClosingEventArgs 对象的 Cancel 属性来停止表单关闭。

于 2010-04-15T08:28:03.060 回答