Как предотвратить закрытие любой формы, используя alt + F4 - PullRequest
0 голосов
/ 21 мая 2018

Это не дубликат Как отключить Alt + F4 закрывающую форму? .Пожалуйста, прочитайте почему.

Я создал специальный MessageBox под своей основной формой.

enter image description here

И установил «Aight» нажатием кнопкислушатель как:

private void Aight_buton_Click(object sender, EventArgs e)
{
    dr = DialogResult.OK;
    Close();
}

То же самое происходит с кнопкой «X».После ответа на поставленный выше вопрос я мог бы сделать следующее:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = e.CloseReason == CloseReason.UserClosing;
}

, но поскольку я использую Close() в Aight_buton_Click, он все равно регистрируется как e.CloseReason == CloseReason.UserClosing;.Поэтому нажатие клавиши не закрывает мою форму (пользовательское окно сообщения) и Alt + F4 .Я хотел бы знать, как конкретно я могу предотвратить только закрытие Alt + F4 и закрытие не Close().И, пожалуйста, я бы предпочел не использовать ModifierKeys, так как это не самый подходящий и не самый умный способ справиться с этой ситуацией.

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Обработайте Atl+F4 самостоятельно и установите его обработанным.

В конструкторе формы сначала установите

this.KeyPreview = true;

Затем обработайте событие keyDown

 private void Form1_KeyDown(object sender, KeyEventArgs e)
 {
     if (e.Alt && e.KeyCode == Keys.F4)
     {
         e.Handled = true;
     }

 }
0 голосов
/ 21 мая 2018

Добавьте в форму поле bool, установите для него значение true в методе Aight_buton_Click, а в Form1_FormClosing запретите закрытие формы только в том случае, если это поле имеет значение false.

Такна уровне формы:

private bool _isAightButonClicked;

Установите значение true в методе Aight_buton_Click:

private void Aight_buton_Click(object sender, EventArgs e)
{
    _isAightButonClicked = true;
    dr = DialogResult.OK;
    Close(); 
}

Используйте его в методе Form1_FormClosing:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = e.CloseReason == CloseReason.UserClosing && !_isAightButonClicked;
}
...