¿La mejor manera de implementar atajos de teclado en una aplicación de Windows Forms?
Estoy buscando la mejor manera de implementar atajos de teclado comunes de Windows (por ejemplo Ctrl+ F, Ctrl+ N) en mi aplicación Windows Forms en C#.
La aplicación tiene un formulario principal que alberga muchos formularios secundarios (uno a la vez). Cuando un usuario presiona Ctrl+ F, me gustaría mostrar un formulario de búsqueda personalizado. El formulario de búsqueda dependerá del formulario secundario abierto actualmente en la aplicación.
Estaba pensando en usar algo como esto en el evento ChildForm_KeyDown :
if (e.KeyCode == Keys.F && Control.ModifierKeys == Keys.Control)
// Show search form
Pero esto no funciona. El evento ni siquiera se activa cuando presionas una tecla. ¿Cuál es la solución?
Probablemente olvidó establecer la propiedad KeyPreview del formulario en True. Anular el método ProcessCmdKey() es la solución genérica:
protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
if (keyData == (Keys.Control | Keys.F)) {
MessageBox.Show("What the Ctrl+F?");
return true;
}
return base.ProcessCmdKey(ref msg, keyData);
}
En tu formulario principal
- Establecer
KeyPreview
en verdadero Agregue el controlador de eventos KeyDown con el siguiente código
private void MainForm_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Keys.N) { SearchForm searchForm = new SearchForm(); searchForm.Show(); } }
La mejor manera es utilizar mnemónicos de menú, es decir, tener entradas de menú en su formulario principal a las que se les asigne el método abreviado de teclado que desee. Luego, todo lo demás se maneja internamente y todo lo que tienes que hacer es implementar la acción apropiada que se ejecuta en el Click
controlador de eventos de esa entrada del menú.