Compartilhar via


Como determinar qual tecla modificadora foi pressionada

Quando você cria um aplicativo que aceita os pressionamentos de tecla do usuário, talvez você também queira monitorar as chaves modificadoras, como as teclas SHIFT, ALT e CTRL. Quando uma tecla modificadora é pressionada em combinação 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 com que um "s" apareça na tela, mas se as teclas CTRL+S forem pressionadas, o documento atual poderá ser salvo. Se você manipular o evento KeyDown, a propriedade Modifiers da KeyEventArgs recebida pelo manipulador de eventos especifica quais teclas modificadoras são pressionadas. Como alternativa, a propriedade KeyData de KeyEventArgs especifica o caractere que foi pressionado, bem como quaisquer teclas modificadoras combinadas com um OR bit a bit. No entanto, se você estiver tratando o evento KeyPress ou um evento do mouse, o manipulador de eventos não receberá essas informações. Nesse caso, você deve usar a propriedade ModifierKeys da classe Control. Em ambos os casos, você deve executar um AND bit a bit do valor de Keys apropriado e do valor que você está testando. A enumeração Keys oferece variações de cada chave modificadora, portanto, é importante que você execute o AND bit a bit com o valor correto. Por exemplo, a chave SHIFT é representada por Shift, ShiftKey, RShiftKey e LShiftKey O valor correto para testar SHIFT como uma chave modificadora é Shift. Da mesma forma, para testar CTRL e ALT como modificadores, você deve usar os valores Control e Alt, respectivamente.

Nota

Os programadores do Visual Basic também podem acessar informações importantes por meio da propriedade Keyboard

Para determinar qual tecla modificadora foi pressionada

  • Use o operador bitwise AND com a propriedade ModifierKeys e um valor da enumeração Keys 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 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
    

Consulte também