Я скажу мое требование. Мне нужно иметь событие keydown
для каждого элемента управления в форме Windows Forms . Лучше сделать это, чем вручную, для всех элементов управления, если то, что я должен сделать для всех событий нажатия клавиш, одинаково.
Так что я мог бы в основном сделать это:
foreach (Control c in this.Controls)
c.KeyDown+= new KeyEventHandler(c_KeyDown);
Но здесь foreach не зацикливается внутри тех элементов управления, которые находятся внутри groupBox или tabControl. Я имею в виду, что если форма (эта) содержит groupBox или какой-либо другой контейнерный элемент управления, тогда я могу получить событие keydown для этого конкретного контейнерного элемента управления. И foreach
не перебирает элементы управления, которые находятся внутри этого элемента управления контейнера.
Вопрос 1: Как получить событие keydown для «всех» элементов управления в форме?
Если вышеуказанная загадка решена, моя проблема окончена.
Вот что я могу сделать в противном случае:
В основном псевдокод
foreach (Control c in this.Controls)
{
c.KeyDown += new KeyEventHandler(c_KeyDown);
if (c is Container control)
FunctionWhichGeneratesKeyDownForAllItsChildControls(c)
}
Я знаю, что мне придется много раз проходить FunctionWhichGeneratesKeyDownForAllItsChildControls(c)
, чтобы получить ключ для всех элементов управления, если внутри группового ящика есть групповые блоки или около того. Я могу сделать это. Мой вопрос,
Вопрос 2: Как я могу проверить, является ли c
контролем контейнера?