La mejor manera que he encontrado para administrar la entrada del teclado en un formulario de Windows Forms es procesarla después de presionar la tecla y antes de que el control enfocado reciba el evento. Microsoft mantiene una Form
propiedad de nivel incorporado llamada .KeyPreview para facilitar esto:
public frmForm()
{
// ...
frmForm.KeyPreview = true;
// ...
}
Luego, los eventos _KeyDown, _KeyPress y / o _KeyUp del formulario se pueden ordenar para acceder a los eventos de entrada antes de que el control de formulario enfocado los vea, y puede aplicar la lógica del controlador para capturar el evento allí o permitir que pase al control de formulario enfocado .
Aunque no es tan estructuralmente elegante como la arquitectura de enrutamiento de eventos de XAML , hace que la administración de las funciones de nivel de formulario en Winforms sea mucho más simple. Consulte las notas de MSDN en KeyPreview para ver las advertencias.