Condividi tramite


Procedura: Determinare quale tasto modificatore è stato premuto

Quando si crea un'applicazione che accetta le sequenze di tasti dell'utente, si può anche voler monitorare i tasti modificatori, come MAIUSC, ALT e CTRL. Quando un tasto di modifica viene premuto in combinazione con altri tasti o con clic del mouse, l'applicazione può rispondere in modo appropriato. Ad esempio, se viene premuta la lettera S, è possibile che venga visualizzata semplicemente una "s" sullo schermo, ma se i tasti CTRL+S vengono premuti, è possibile salvare il documento corrente. Se si gestisce l'evento KeyDown, la proprietà Modifiers del KeyEventArgs ricevuto dal gestore eventi specifica quali tasti di modifica vengono premuti. In alternativa, la proprietà KeyData di KeyEventArgs specifica il carattere premuto, nonché qualsiasi tasto di modifica combinato con un OR bit per bit. Tuttavia, se si gestisce l'evento KeyPress o un evento del mouse, il gestore eventi non riceve queste informazioni. In questo caso, è necessario utilizzare la proprietà ModifierKeys della classe Control. In entrambi i casi, è necessario eseguire un AND bit a bit del valore Keys appropriato e del valore di cui si esegue il test. L'enumerazione Keys offre variazioni di ogni tasto modificatore, quindi è importante effettuare un'operazione di AND bit a bit con il valore corretto. Ad esempio, il tasto MAIUSC è rappresentato da Shift, ShiftKey, RShiftKey e LShiftKey Il valore corretto per testare MAIUSC come tasto di modifica è Shift. Analogamente, per verificare la ricerca di CTRL e ALT come modificatori, è consigliabile usare rispettivamente i valori Control e Alt.

Nota

I programmatori di Visual Basic possono anche accedere alle informazioni chiave tramite la proprietà Keyboard

Per determinare quale tasto di modifica è stato premuto

  • Utilizzare l'operatore bitwise AND con la proprietà ModifierKeys e un valore dell'enumerazione Keys per determinare se viene premuto un particolare tasto modificatore. Nell'esempio di codice seguente viene illustrato come determinare se il tasto MAIUSC viene premuto all'interno di un gestore eventi 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
    

Vedere anche