Compartir a través de


Información general sobre el uso del teclado

En Windows Forms, la entrada del usuario se envía a las aplicaciones en forma de mensajes de Windows. Una serie de métodos reemplazables procesa estos mensajes en el nivel de aplicación, formulario y control. Cuando estos métodos reciben mensajes de teclado, generan eventos que se pueden controlar para obtener información sobre la entrada del teclado. En muchos casos, las aplicaciones de Windows Forms pueden procesar toda la entrada del usuario simplemente controlando estos eventos. En otros casos, una aplicación podría necesitar invalidar uno de los métodos que procesan los mensajes para interceptar un mensaje determinado antes de que la aplicación, el formulario o el control lo reciban.

Eventos de teclado

Todos los controles de Windows Forms heredan un conjunto de eventos relacionados con la entrada del mouse y el teclado. Por ejemplo, un control puede controlar el KeyPress evento para determinar el código de carácter de una tecla presionada. Para obtener más información, consulte Uso de eventos de teclado.

Métodos que procesan mensajes de entrada de usuario

Los formularios y controles tienen acceso a la IMessageFilter interfaz y a un conjunto de métodos reemplazables que procesan mensajes de Windows en distintos puntos de la cola de mensajes. Todos estos métodos tienen un Message parámetro, que encapsula los detalles de bajo nivel de los mensajes de Windows. Puede implementar o invalidar estos métodos para examinar el mensaje y, a continuación, consumirlo o pasarlo al siguiente consumidor de la cola de mensajes. En la tabla siguiente se presentan los métodos que procesan todos los mensajes de Windows Forms.

Método Notas
PreFilterMessage Este método intercepta los mensajes de Windows en cola (también conocidos como publicados) a nivel de aplicación.
PreProcessMessage Este método intercepta los mensajes de Windows en el nivel de formulario y control antes de que se hayan procesado.
WndProc Este método procesa los mensajes de Windows en el nivel de formulario y control.
DefWndProc Este método realiza el procesamiento predeterminado de mensajes de Windows en el nivel de formulario y control. Esto proporciona la funcionalidad mínima de una ventana.
OnNotifyMessage Este método intercepta los mensajes en el nivel de formulario y control, una vez procesados. El EnableNotifyMessage bit de estilo debe establecerse para poder llamar a este método.

Los mensajes de teclado y mouse se procesan mediante un conjunto adicional de métodos reemplazables que son específicos de esos tipos de mensajes. Para obtener más información, consulte la sección Claves de preprocesamiento .

Tipos de claves

Windows Forms identifica la entrada del teclado como códigos de tecla virtual que se representan en la enumeración bit a bit Keys. Con la Keys enumeración, puede combinar una serie de teclas presionadas para dar lugar a un único valor. Estos valores corresponden a los valores que acompañan al WM_KEYDOWN y WM_SYSKEYDOWN mensajes de Windows. Puede detectar la mayoría de las pulsaciones de teclas físicas manejando los eventos KeyDown o KeyUp. Las teclas de caracteres son un subconjunto de la Keys enumeración y corresponden a los valores que acompañan al WM_CHAR y WM_SYSCHAR mensajes de Windows. Si la combinación de teclas presionadas da como resultado un carácter, puede detectar el carácter controlando el KeyPress evento. Como alternativa, puede usar Keyboard, expuesto por la interfaz de programación de Visual Basic, para detectar qué teclas se presionaron y enviar teclas. Para obtener más información, vea Acceder al teclado (Visual Basic).

Orden de eventos de teclado

Como se ha indicado anteriormente, hay tres eventos relacionados con el teclado que se pueden producir en un control. En la secuencia siguiente se muestra el orden general de los eventos:

  1. El usuario inserta la clave A , la clave se preprocesa, se envía y se produce un KeyDown evento.
  2. El usuario contiene la clave A , la clave se preprocesa, se envía y se produce un KeyPress evento. Este evento se produce varias veces cuando el usuario contiene una clave.
  3. El usuario libera la clave A , la clave se preprocesa, se envía y se produce un KeyUp evento.

Preprocesamiento de claves

Al igual que otros mensajes, los mensajes de teclado se procesan en el WndProc método de un formulario o control. Sin embargo, antes de procesar los mensajes de teclado, el PreProcessMessage método llama a uno o varios métodos que se pueden invalidar para controlar teclas de caracteres especiales y teclas físicas. Puede invalidar estos métodos para detectar y filtrar determinadas claves antes de que el control procese los mensajes. En la tabla siguiente se muestra la acción que se está realizando y el método relacionado que se produce, en el orden en que se produce el método.

Preprocesamiento de un evento KeyDown

Acción Método relacionado Notas
Busque una tecla de comando, como un método abreviado de acelerador o menú. ProcessCmdKey Este método procesa una clave de comando, que tiene prioridad sobre las claves normales. Si este método devuelve true, no se envía el mensaje de clave y no se produce un evento de clave. Si devuelve false, IsInputKey se llama a ..
Compruebe si hay una clave especial que requiere preprocesamiento o una clave de carácter normal que debe generar un KeyDown evento y enviarse a un control. IsInputKey Si el método devuelve true, significa que el control es un carácter normal y se genera un KeyDown evento. Si false, se llama a ProcessDialogKey. Nota: Para asegurarse de que un control obtiene una tecla o combinación de teclas, puede manejar el evento PreviewKeyDown y establecer IsInputKey del PreviewKeyDownEventArgs en true para la tecla o las teclas que desee.
Busque una clave de navegación (ESC, TAB, Return o teclas de dirección). ProcessDialogKey Este método procesa una clave física que emplea una funcionalidad especial dentro del control, como cambiar el foco entre el control y su elemento primario. Si el control inmediato no controla la clave, ProcessDialogKey se llama al control primario, etc., al control superior de la jerarquía. Si este método devuelve true, el preprocesamiento se completa y no se genera un evento de clave. Si devuelve false, se produce un KeyDown evento.

Preprocesamiento de un evento KeyPress

Acción Método relacionado Notas
Compruebe que la tecla es un carácter normal que el control debe procesar. IsInputChar Si el carácter es un carácter normal, este método devuelve true, se genera el KeyPress evento y no se produce ningún preprocesamiento adicional. De lo contrario, se llama a ProcessDialogChar.
Compruebe si el carácter es un mnemónico (como &OK en un botón) ProcessDialogChar Este método, similar a ProcessDialogKey, se invoca en la jerarquía de controles. Si el control es un control contenedor, comprueba si hay mnemonics llamando ProcessMnemonic a sí mismo y sus controles secundarios. Si ProcessDialogChar devuelve true, no se produce un KeyPress evento.

Procesamiento de mensajes de teclado

Después de que los mensajes de teclado lleguen al WndProc método de un formulario o control, se procesan mediante un conjunto de métodos que se pueden invalidar. Cada uno de estos métodos devuelve un Boolean valor que especifica si el control ha procesado y consumido el mensaje de teclado. Si uno de los métodos devuelve true, el mensaje se considera controlado y no se pasa a la base o al elemento primario del control para su posterior procesamiento. De lo contrario, el mensaje permanece en la cola de mensajes y puede procesarse en otro método en la base o el elemento primario del control. En la tabla siguiente se presentan los métodos que procesan mensajes de teclado.

Método Notas
ProcessKeyMessage Este método procesa todos los mensajes de teclado recibidos por el WndProc método del control .
ProcessKeyPreview Este método envía el mensaje de teclado al elemento primario del control. Si ProcessKeyPreview devuelve true, no se genera ningún evento de clave; de lo contrario ProcessKeyEventArgs , se llama a .
ProcessKeyEventArgs Este método genera los eventos KeyDown, KeyPress y KeyUp, según corresponda.

Sobrescritura de métodos de teclado

Hay muchos métodos disponibles para invalidar cuando se preprocesa y procesa un mensaje de teclado; sin embargo, algunos métodos son mejores opciones que otras. En la tabla siguiente se muestran las tareas que puede querer realizar y la mejor manera de invalidar los métodos de teclado. Para obtener más información sobre cómo invalidar métodos, vea Herencia (Guía de programación de C#) o Herencia (Visual Basic)

Tarea Método
Intercepte una clave de navegación y genere un KeyDown evento. Por ejemplo, quiere que tab y Entrar se controle en un cuadro de texto. Sobrescriba IsInputKey. Como alternativa, puede controlar el PreviewKeyDown evento y el conjunto IsInputKey de en PreviewKeyDownEventArgstrue para la clave o claves que desee.
Realice un manejo especial de entrada o navegación en un elemento de control. Por ejemplo, quiere que el uso de teclas de dirección en el control de lista cambie el elemento seleccionado. Sobrescribir ProcessDialogKey
Intercepte una clave de navegación y genere un KeyPress evento. Por ejemplo, en un control de cuadro giratorio, quiere que se presionen varias veces las teclas de flecha para acelerar la rápida progresión a través de los elementos. Sobrescriba IsInputChar.
Realice una entrada especial o control de navegación durante un KeyPress evento. Por ejemplo, en un control de lista, al mantener presionada la tecla R, se salta entre los elementos que comienzan por la letra r. Sobrescribir ProcessDialogChar
Llevar a cabo un manejo de mnemónicos personalizados; por ejemplo, desea manejar los mnemónicos en los botones dibujados por el usuario contenidos en una barra de herramientas. Sobrescriba ProcessMnemonic.

Consulte también