禁用Alt + F4,但允许通过代码关闭表单,CloseReason.UserClosing没有帮助

Ric*_*047 6 .net c# application-close winforms

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

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

Reg*_*ent 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;
    }
    
    Run Code Online (Sandbox Code Playgroud)