Отключите Alt+F4, но позвольте форме быть закрытой кодом, CloseReason. UserClosing не помогает

Я хочу это, форма не будет рядом с выполнением Высокого звука + F4, но если Application.Exit() или this.Close назван от той же Формы, она должна быть закрыта.

Я попробовал CloseReason.UserClosing но все еще никакая справка.

6
задан Wai Ha Lee 2 October 2015 в 09:56
поделиться

3 ответа

Если вам нужно отфильтровать Alt + F4 только событие ( оставив щелчок по окну закрытия, this.Close () и Application.Exit () , чтобы вести себя как обычно), я могу предложить следующее:

  1. Установить форму KeyPreview свойство для true ;
  2. Подключить события формы FormClosing и KeyDown :

     private void Form1_FormClosing (объект-отправитель, FormClosingEventArgs e) { {1}} {
    if (_altF4Pressed) 
     {
    if (e.CloseReason == CloseReason.UserClosing) 
    e.Cancel = true; {{1 }} _altF4Pressed = false; 
    } 
    } 
     
    private bool _altF4Pressed; 
    private void Form1_KeyDown (объект-отправитель, KeyEventArgs e) {{1 }} {
    if (e.Alt && e.KeyCode == Keys.F4) 
     _altF4Pressed = true; 
    } 
     
20
ответ дан 8 December 2019 в 05:20
поделиться

Как вы использовали CloseReason?

См. Пример кода здесь: {{1} } http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx

Вам необходимо установить свойство Cancel переданного объекта FormClosingEventArgs, чтобы остановить форму закрытие.

0
ответ дан 8 December 2019 в 05:20
поделиться

Захватите горячую клавишу Alt + F4, установив для свойства KeyPreview формы значение true и переопределив метод OnProcessCmdKey.

0
ответ дан 8 December 2019 в 05:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: