Share via


Como determinar qual tecla modificadora foi pressionada

Quando você cria um aplicativo que aceita a digitação do usuário, também é recomendável monitorar as teclas modificadoras como SHIFT, ALT e CTRL. Quando uma tecla modificadora for pressionada junto com outras teclas, ou com cliques do mouse, seu aplicativo pode responder adequadamente. Por exemplo, se a letra S for pressionada, isso poderá simplesmente fazer um “s” aparecer na tela, mas se as teclas CTRL + S forem pressionadas, o documento atual poderá ser salvo. Se você manipular o KeyDown evento, a Modifiers propriedade do recebido pelo manipulador de KeyEventArgs eventos especificará quais teclas modificadoras serão pressionadas. Como alternativa, a propriedade de KeyEventArgs especifica o caractere que foi pressionado, bem como quaisquer teclas modificadoras combinadas com um OR bit a KeyData bit. No entanto, se você estiver manipulando o evento ou um evento de mouse, o KeyPress manipulador de eventos não receberá essas informações. Nesse caso, você deve usar a ModifierKeysControl propriedade da classe. Em ambos os casos, você deve executar um bit a bit AND do valor apropriado Keys e do valor que você está testando. A Keys enumeração oferece variações de cada chave modificadora, portanto, é importante que você execute o bit a bit AND com o valor correto. Por exemplo, a tecla SHIFT é representada por Shift, ShiftKeyRShiftKey e LShiftKey O valor correto para testar SHIFT como uma tecla modificadora é Shift. Da mesma forma, para testar CTRL e ALT como modificadores, você deve usar os Control valores e Alt , respectivamente.

Observação

Programadores do Visual Basic também podem acessar informações de chave através da Keyboard propriedade

Determinar qual tecla modificadora foi pressionada

  • Use o operador bit a bit AND com a ModifierKeys propriedade e um valor da Keys enumeração para determinar se uma tecla modificadora específica é pressionada. O exemplo de código a seguir mostra como determinar se a tecla SHIFT é pressionada dentro de um manipulador de KeyPress eventos.

    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
    

Confira também