Procedimiento para determinar qué tecla modificadora se ha presionado

Al crear una aplicación que acepte las pulsaciones de teclas del usuario, es posible que también quiera supervisar las teclas modificadoras, como las teclas MAYÚS, ALT y CTRL. Cuando se presiona una tecla modificadora en combinación con otras teclas, o con clics del mouse, la aplicación puede responder de forma adecuada. Por ejemplo, si se presiona la letra S, esto puede hacer que aparezca una "s" en la pantalla, pero si se presionan las teclas CTRL+S, se puede guardar el documento actual. Si controla el evento KeyDown, la propiedad Modifiers del KeyEventArgs que recibe el controlador de eventos especifica qué teclas modificadoras se han presionado. Como alternativa, la propiedad KeyData de KeyEventArgs especifica el carácter que se ha pulsado así como cualquier tecla modificadora combinada con una operación OR bit a bit. Sin embargo, si controla el evento KeyPress o uno del mouse, el controlador de eventos no recibe esta información. En este caso, debe usar la propiedad ModifierKeys de la clase Control. 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 con Shift, ShiftKey, RShiftKey y LShiftKey El valor correcto para probar MAYÚS como tecla modificadora es Shift. Del mismo modo, para probar CTRL y ALT como modificadores, debe usar los valores Control y Alt, respectivamente.

Nota:

Los programadores de Visual Basic también pueden acceder a la información clave a través de la propiedad Keyboard

Para determinar qué tecla modificadora se ha pulsado

  • Utiliza el operador bit a bit AND con la propiedad ModifierKeys y un valor de la enumeración Keys para determinar si una tecla modificadora concreta está pulsada. En el ejemplo de código siguiente se muestra cómo determinar si se ha presionado la tecla MAYÚS dentro de un controlador de eventos KeyPress.

    private:
        void textBox1_KeyPress(Object^ sender, KeyPressEventArgs^ e)
        {
            if ((Control::ModifierKeys & Keys::Shift) == Keys::Shift)
            {
                MessageBox::Show("Pressed " + Keys::Shift.ToString());
            }
        }
    
    public void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
    {
        if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift)
        {
            MessageBox.Show("Pressed " + Keys.Shift);
        }
    }
    
    Public Sub TextBox1_KeyPress(ByVal sender As Object, _
        ByVal e As KeyPressEventArgs) Handles TextBox1.KeyPress
    
        If ((Control.ModifierKeys And Keys.Shift) = Keys.Shift) Then
            MsgBox("Pressed " + Keys.Shift.ToString())
        End If
    End Sub
    

Vea también