У меня небольшая форма, которая появляется, когда я нажимаю кнопку в приложении Windows Forms.
Я хочу иметь возможность закрыть форму, нажав клавишу эвакуации. Как я могу это сделать? Я не уверен в использовании события (form_closing?)?
У меня небольшая форма, которая появляется, когда я нажимаю кнопку в приложении Windows Forms.
Я хочу иметь возможность закрыть форму, нажав клавишу эвакуации. Как я могу это сделать? Я не уверен в использовании события (form_closing?)?
Вы можете установить свойство в форме, чтобы сделать это для вас, если у вас есть кнопка в форме, которая уже закрывает форму.
Задайте CancelButton
свойство формы для этой кнопки.
Получает или задает элемент управления кнопки, который нажимается, когда пользователь нажимает клавишу Esc.
Если у вас нет кнопки отмены, вам нужно добавить обработчик KeyDown
и проверить для ключа Esc следующее:
private void Form_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Escape)
{
this.Close();
}
}
Вам также необходимо установить для свойства KeyPreview
значение true.
Возвращает или задает значение, указывающее, будет ли форма получать ключевые события до того, как событие будет передано элементу управления, имеющему фокус.
Однако, как указывает Гарго в ответе , это будет означать, что нажатие Esc, чтобы прервать редактирование элемента управления в диалоговом окне, также будет иметь эффект закрытие диалога. Чтобы избежать переопределения метода ProcessDialogKey
следующим образом:
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
Лучший способ, которым я нашел, - переопределить функцию ProcessDialogKey. Этот способ отмены открытого управления по-прежнему возможен, потому что функция вызывается только тогда, когда другой элемент управления не использует нажатый Ключ.
Это то же поведение, что и при установке CancelButton. Использование события KeyDown всегда срабатывает, и форма закрывается, даже если она отменяет редактирование открытого редактора.
protected override bool ProcessDialogKey(Keys keyData)
{
if (Form.ModifierKeys == Keys.None && keyData == Keys.Escape)
{
this.Close();
return true;
}
return base.ProcessDialogKey(keyData);
}
Если у вас есть кнопка отмены в форме, вы можете установить свойство Form.CancelButton на эту кнопку, а затем нажатие кнопки escape эффективно "нажимает кнопку".
Если у вас нет такой кнопки, проверьте свойство Form.KeyPreview.
Button cancelBTN = new Button();
cancelBTN.Size = new Size(0, 0);
cancelBTN.TabStop = false;
this.Controls.Add(cancelBTN);
this.CancelButton = cancelBTN;