Захват нажатия клавиш для формы, но не для элементов управления - PullRequest
3 голосов
/ 23 июня 2009

У меня есть простая модальная форма, которую я хотел бы закрыть, когда нажата Esc . Это просто сделать обработку события form_KeyDown. Проблема в элементах управления в форме. При первом запуске формы одна из кнопок получает фокус, и нажатие Esc , конечно, ничего не делает. Отключение TabStop каждой кнопки предотвращает это, но снова Esc перестает работать при использовании любой кнопки. Есть ли способ сделать это иначе, чем обрабатывать KeyDown каждого элемента управления в форме?

Ответы [ 3 ]

8 голосов
/ 23 июня 2009

Есть ли в вашей форме кнопка "Отмена"?

Если это так, присвойте этой кнопке свойство CancelButton формы.

Это закроет форму при нажатии Esc .

4 голосов
/ 23 июня 2009

Необходимо установить для свойства KeyPreview в форме значение true и обработать событие previewkeydown для форм.

0 голосов
/ 26 августа 2009

Я пытался сделать более или менее то же самое в приложении Compact Framework (я хотел, чтобы Form захватывал клавиши F1..Fn и обрабатывал их глобально, одновременно позволяя элементам управления обрабатывать курсор и цифровые клавиши ). Приведенное выше решение Simon P Stevens идеально подходит для настольных компьютеров .NET, но PreviewKeyDown не поддерживается CF. Итак, мое решение было:

  • при загрузке формы зарегистрируйте обработчик KeyDown каждого элемента управления, используя For Each ctl As Control In Controls и AddHandler ctl.KeyDown, AddressOf OnControlKeyDown

  • Создайте OnControlKeyDown и выполните там специальную обработку для клавиш Fn. Все остальные нажатия клавиш остаются без изменений.

Кажется, это достаточно простой способ реализовать это для Compact Framework.

...