Как закрыть дочернее окно, используя Alt + F4?
Alt + F4 - это ярлык для закрытия формы. Когда я использую этот ярлык в среде MDI, приложение закрывается, поэтому очевидно, что ярлык применяется к "Контейнеру", а не к "Childform".
Какова была бы лучшая практика для захвата этого события и закрытия активного потомка вместо контейнера
я прочитал о регистрации Alt + F4 как горячей клавиши, когда MDI активируется. Когда MDI деактивируется, отменяется регистрация горячей клавиши. Таким образом, горячая клавиша не влияет на другие окна.
кто-то, может рассказать о регистрации Alt + F4 или что-то лучше
1 ответ
Вы можете изменить void Dispose(bool disposing)
метод в вашей winform, чтобы вместо этого закрыть дочернюю форму, например так:
protected override void Dispose(bool disposing)
{
if (/* you need to close a child form */)
{
// close the child form, maybe by calling its Dispose method
}
else
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
}
РЕДАКТИРОВАТЬ: как сказал мой комментатор, вместо изменения переопределенного Dispose
метод, вы должны просто переопределить OnFormClosing
метод вместо этого, вот так:
protected override void OnFormClosing(FormClosingEventArgs e)
{
if (/* you need to close the child form */)
{
e.Cancel = true;
// close the child form, maybe with childForm.Close();
}
else
base.OnFormClosing(e);
}
Поскольку на данный вопрос еще никто не ответил, это можно сделать, выполнив следующие два шага:
Шаг 1. Используйте эту простую логику, чтобы запустить закрытие дочерней формы MDI с помощью Alt+F4.
private void child_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Alt && e.KeyCode == Keys.F4)
{
this.Close();
}
}
Шаг 2. Также используйте этот прием, чтобы отключить эффекты Alt+, F4 влияющие на родительскую форму MDI.
private void parent_FormClosing(object sender, FormClosingEventArgs e)
{
// note the use of logical OR instead of logical AND here
if (Control.ModifierKeys == Keys.Alt || Control.ModifierKeys == Keys.F4)
{
e.Cancel = true;
return;
}
}