Come verificare la presenza di tasti di modifica (Windows Form .NET)
Quando l'utente digita i tasti nell'applicazione, è possibile monitorare i tasti di modifica premuti, ad esempio MAIUSC, ALT e CTRL. Quando si preme un tasto di modifica in combinazione con altri tasti o anche un clic del mouse, l'applicazione può rispondere in modo appropriato. Ad esempio, premendo il tasto S è possibile che venga visualizzata una "s" sullo schermo. Se i tasti CTRL+S vengono premuti, è possibile salvare il documento corrente.
Se si gestisce l'evento KeyDown , la KeyEventArgs.Modifiers proprietà ricevuta dal gestore eventi specifica quali tasti di modifica vengono premuti. Inoltre, la KeyEventArgs.KeyData proprietà specifica il carattere premuto insieme a qualsiasi tasto di modifica combinato con un OR bit per bit.
Se si gestisce l'evento KeyPress o un evento del mouse, il gestore eventi non riceve queste informazioni. Utilizzare la ModifierKeys proprietà della Control classe per rilevare un modificatore di tasti. In entrambi i casi, è necessario eseguire un AND bit per bit del valore appropriato Keys e il valore che si sta testando. L'enumerazione Keys offre variazioni di ogni tasto di modifica, quindi è importante eseguire il controllo AND bit per bit con il valore corretto.
Ad esempio, il tasto MAIUSC è rappresentato dai valori di chiave seguenti:
Il valore corretto per testare MAIUSC come tasto di modifica è Keys.Shift. Analogamente, per verificare la ricerca di CTRL e ALT come modificatori, è consigliabile usare rispettivamente i Keys.Control valori e Keys.Alt .
Rilevare la chiave del modificatore
Rilevare se viene premuto un tasto di modifica confrontando la ModifierKeys proprietà e il Keys valore di enumerazione con un operatore AND bit per bit.
Nell'esempio di codice seguente viene illustrato come determinare se il tasto MAIUSC viene premuto all'interno dei KeyPress gestori eventi 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
Vedi anche
.NET Desktop feedback