Compartilhar via


Como verificar se há pressionamentos de tecla modificadora (Windows Forms .NET)

À medida que o usuário digita teclas em seu aplicativo, você pode monitorar as teclas modificadoras pressionadas, como SHIFT, ALT e CTRL. Quando uma tecla modificadora é pressionada em combinação com outras teclas ou até mesmo um clique do mouse, seu aplicativo pode responder adequadamente. Por exemplo, pressionar a tecla S pode fazer com que um "s" apareça na tela. Se as teclas CTRL+S forem pressionadas, em vez disso, o documento atual pode ser salvo.

Importante

A documentação do Guia da Área de Trabalho para .NET 7 e .NET 6 está em construção.

Se você manipular o KeyDown evento, a KeyEventArgs.Modifiers propriedade recebida pelo manipulador de eventos especificará quais teclas modificadoras serão pressionadas. Além disso, a propriedade especifica o caractere que foi pressionado junto com quaisquer teclas modificadoras combinadas com um OR bit a KeyEventArgs.KeyData bit.

Se você estiver manipulando o evento ou um evento do mouse, o KeyPress manipulador de eventos não receberá essas informações. Use a ModifierKeysControl propriedade da classe para detectar um modificador de chave. 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, por isso é importante que você faça o bit a bit E verifique com o valor correto.

Por exemplo, a tecla SHIFT é representada pelos seguintes valores de chave:

O valor correto para testar SHIFT como uma chave modificadora é Keys.Shift. Da mesma forma, para testar CTRL e ALT como modificadores, você deve usar os Keys.Control valores e Keys.Alt , respectivamente.

Detectar chave modificadora

Detecte se uma tecla modificadora é pressionada comparando a propriedade e o Keys valor de enumeração com um operador AND bit a ModifierKeys bit.

O exemplo de código a seguir mostra como determinar se a tecla SHIFT é pressionada dentro dos KeyPress manipuladores de eventos e 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

Confira também