Disable Alt+F4 but allow the the form to be closed by code, CloseReason.UserClosing is not helping

ⅰ亾dé卋堺 提交于 2019-12-07 02:01:26

问题


I want that the form will not close by doing Alt + F4 but if Application.Exit() or this.Close is called from the same Form, it should be closed.

I tried CloseReason.UserClosing but still no help.


回答1:


If you need to filter out Alt + F4 event only (leaving clicking of close box, this.Close() and Application.Exit() to behave as usual) then I can suggest the following:

  1. Set form's KeyPreview property to true;
  2. Wire up form's FormClosing and KeyDown events:

    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;
    }
    



回答2:


It's very easy you can do it by set SuppressKeyPress property to true on Form_Keydown EventHandler as below.

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

        }

With this you can also close your active form by set SuppressKeyPress Property to false on same eventHandller or any other way.




回答3:


Capture Alt+F4 hotkey by setting Form's KeyPreview property to true and overriding OnProcessCmdKey method.




回答4:


How did you use CloseReason?

See the sample code here: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx

You need to set the Cancel property of the passed FormClosingEventArgs object to stop the form closing.



来源:https://stackoverflow.com/questions/2643712/disable-altf4-but-allow-the-the-form-to-be-closed-by-code-closereason-userclos

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!