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.

Importante

La documentazione di Desktop Guide per .NET 7 e .NET 6 è in fase di costruzione.

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