У меня есть проект Windows Form C # / .Net.На нем есть форма с несколькими пользовательскими элементами управления.Каждый пользовательский элемент управления закреплен так, что он занимает всю форму.Когда нажата кнопка на одном пользовательском элементе управления, этот пользовательский элемент управления скрывается, и появляется другой.Это было сделано коллегой и находится в производстве и не может быть изменено (то есть я абсолютно не могу избавиться от пользовательских элементов управления и не могу изменить их, если в этом нет особой необходимости).Мне нужна панель (или, может быть, другой пользовательский элемент управления) в форме, которая может быть вызвана при каком-либо событии (например, при нажатии определенной комбинации клавиш, например, CTRL-Q).Однако, если я помещу событие KeyDown в форму, оно никогда не сработает, потому что один из пользовательских элементов управления всегда имеет фокус.Я мог бы разместить свою новую панель на каждом пользовательском элементе управления и иметь события KeyDown на каждом из них, но на самом деле я не должен менять существующие пользовательские элементы управления, и я не хочу, чтобы несколько экземпляров этой панели и несколько событий.Как вызвать событие уровня формы, когда фокус находится у одного из пользовательских элементов управления?
Вот как устроены форма, пользовательский элемент управления и панели.Пользовательские элементы управления фактически закреплены, чтобы заполнить всю форму;Я пометил их на этом рисунке, чтобы вы могли видеть их все.
----------------------------------------------------------------------
| form1 |
| |
| --------------------------------------------------------------- |
| | userControl1 | |
| | | |
| | | |
| | -------------------------------------------------------- | |
| | | userControl2 | | |
| | | | | |
| | | | | |
| | | -------------------------------------------------- | | |
| | | | userControl3 | | | |
| | | | | | | |
| | | --------------------------------------------------- | | |
| | | | | |
| | -------------------------------------------------------- | |
| | | |
| --------------------------------------------------------------- |
| |
| |
| ------------------------------------------------------------------ |
| | panel or user control on top of everything, visible on demand | |
| ------------------------------------------------------------------ |
| |
----------------------------------------------------------------------
Я хочу, чтобы это событие из формы Form1 запускалось независимо от того, какой пользовательский элемент управления активен:
private void form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.Q)
{
panel1.Visible = true;
}
}