Вы должны переопределить метод ProcessCommandKey
базового класса Form
таким образом, вызвав Close()
вместо Dispose()
, потому что вызов dispose не является хорошей практикой:
public partial class EscapableForm
{
protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
switch ( keyData )
{
case Keys.Escape:
Close();
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
}
Переопределениеметод здесь лучше, чем использование события, поскольку он обеспечивает лучшую согласованность проекта.
Таким образом, где бы ни находился пользователь, независимо от активного контроля, ключи отлавливаются, и вы можете управлять тем, что вы хотите. Вы также можете добавить любое условие UX, например, условную переменную AllowClose
.
Чтобы не повторять код, вы можете создать файл пользовательского класса формы и заменить стандартный базовый класс формы, используемый Visual STudio Designer, в любом конечномФорма, подобная предложенной @ Cid.