Лучший способ, который я нашел для управления вводом с клавиатуры в форме Windows Forms, - это обработать его после нажатия клавиши и до того, как сфокусированный элемент управления получит событие. Microsoft поддерживает встроенное Form
свойство -level с именем .KeyPreview, чтобы упростить эту задачу :
public frmForm()
{
// ...
frmForm.KeyPreview = true;
// ...
}
Затем события формы _KeyDown, _KeyPress и / или _KeyUp могут быть маршалированы для доступа к событиям ввода до того, как элемент управления сфокусированной формой когда-либо их увидит, и вы можете применить логику обработчика, чтобы захватить событие там или позволить ему перейти к элементу управления сфокусированной формой ,
Несмотря на то, что она не такая структурно изящная, как архитектура маршрутизации событий XAML , она значительно упрощает управление функциями уровня формы в Winforms. См. Примечания MSDN по KeyPreview для предупреждений .