Procedimiento para comprobar pulsaciones de teclas modificadoras (Windows Forms para .NET)

A medida que el usuario presiona teclas en la aplicación, puede supervisar las teclas modificadoras que se han presionado, como MAYÚS, ALT y CTRL. Cuando se presiona una tecla modificadora en combinación con otras teclas o incluso con un clic del mouse, la aplicación puede responder de la forma adecuada. Por ejemplo, al presionar la tecla S puede que aparezca una "s" en la pantalla. Si se presionan las teclas CTRL+S, en su lugar se puede guardar el documento actual.

Importante

La documentación de la guía de escritorio para .NET 7 y .NET 6 está en proceso de elaboración.

Si controla el evento KeyDown, la propiedad KeyEventArgs.Modifiers que recibe el controlador de eventos especifica qué teclas modificadoras se han presionado. Además, la propiedad KeyEventArgs.KeyData especifica el carácter que se ha presionado junto con cualquier tecla modificadora combinada con una operación OR bit a bit.

Si controla el evento KeyPress o uno del mouse, el controlador de eventos no recibe esta información. Use la propiedad ModifierKeys de la clase Control para detectar una tecla modificadora. En cualquier caso, debe realizar una operación AND bit a bit del valor Keys adecuado y el valor que se prueba. La enumeración Keys ofrece variaciones de cada tecla modificadora, por lo que es importante que realice la operación AND bit a bit con el valor correcto.

Por ejemplo, la tecla MAYÚS se representa mediante los valores de clave siguientes:

El valor correcto para probar MAYÚS como tecla modificadora es Keys.Shift. Del mismo modo, para probar CTRL y ALT como modificadores, debe usar los valores Keys.Control y Keys.Alt, respectivamente.

Detección de teclas modificadoras

Para detectar si se ha presionado una tecla modificadora, compare la propiedad ModifierKeys y el valor de enumeración Keys con un operador AND bit a bit.

En el ejemplo de código siguiente se muestra cómo determinar si se ha presionado la tecla MAYÚS dentro de los controladores de eventos KeyPress y KeyDown.

// Event only raised when non-modifier key is pressed
private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyPress " + Keys.Shift);
}

// Event raised as soon as shift is pressed
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        MessageBox.Show("KeyDown " + Keys.Shift);
}
' Event only raised when non-modifier key is pressed
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

' Event raised as soon as shift is pressed
Private Sub TextBox1_KeyDown(sender As Object, e As KeyEventArgs)
    If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
        MessageBox.Show("KeyPress " & [Enum].GetName(GetType(Keys), Keys.Shift))
    End If
End Sub

Vea también