Почему родительская форма отвечает на сочетания клавиш дочерней формы? - PullRequest
0 голосов
/ 04 сентября 2011

C # WinForms: у меня есть форма MDI, и я определил некоторые сочетания клавиш для ее меню, например «ALT + C», чтобы открыть кнопку панели инструментов «Действия».проблема в том, что если я открываю эту дочернюю форму внутри родительской формы, но все же щелкаю мышью где-то внутри родительской формы и нажимаю «ACLT + C», она все равно отвечает на нее и открывает меню «Действия» дочерней формы.Как я могу предотвратить это?

Ответы [ 2 ]

1 голос
/ 04 сентября 2011

Там может быть лучшее решение, но быстрый способ - проверить, имеет ли форма фокус. Итак, в вашем дочернем обработчике событий добавьте сверху:

if ( this.MdiParent.ActiveControl.Name != this.Name )
{
    return;
}

Очевидно, что это не мешает запуску события, а только предотвращает запуск следующего кода.

Редактировать: Если для элемента меню нет обработчика событий, единственный другой способ, который я могу придумать, - это создать обработчики для событий Enter и Leave дочерней формы:

private void ChildForm_Leave( object sender, EventArgs e )
{
    menuItem.Enabled = false;
}

private void ChildForm_Enter( object sender, EventArgs e )
{
    menuItem.Enabled = true;
}
1 голос
/ 04 сентября 2011

Добавьте флажок в форму

bool actionWindow = false

и затем, когда окно открывается, установите для actionWindow значение true. В вашем слушателе проверьте для actionWindow. Затем, когда actionWindow закроется, установите bool обратно в false.

try: в дочерней форме укажите e.Handled = true; в событии нажатия клавиши.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...