Como verificar se há pressionamentos de teclas modificadoras (Windows Forms .NET)
À medida que o usuário digita teclas em seu aplicativo, você pode monitorar teclas modificadoras pressionadas, como o SHIFT, ALTe 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 poderá ser salvo.
Se você manipular o evento KeyDown, a propriedade KeyEventArgs.Modifiers recebida pelo manipulador de eventos especificará quais teclas modificadoras serão pressionadas. Além disso, a propriedade KeyEventArgs.KeyData especifica o caractere que foi pressionado junto com quaisquer teclas modificadoras combinadas com um bit a bit OR.
Se você estiver manipulando o evento KeyPress ou um evento de mouse, o manipulador de eventos não receberá essas informações. Use a propriedade ModifierKeys da classe Control para detetar um modificador de chave. Em ambos os casos, deve realizar um AND bit a bit do valor Keys apropriado e do valor que está a testar. A enumeração Keys oferece variações de cada tecla modificadora, por isso é importante que você faça a verificação AND bit a bit com o valor correto.
Por exemplo, a chave 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 valores Keys.Control e Keys.Alt, respectivamente.
Detetar chave modificadora
Detecte se uma tecla modificadora é pressionada comparando a propriedade ModifierKeys e o valor de enumeração Keys com um operador AND bitwise.
O exemplo de código a seguir mostra como determinar se a tecla SHIFT é pressionada dentro dos manipuladores de eventos KeyPress 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
Ver também
.NET Desktop feedback