Porady: określanie, który klawisz modyfikujący został naciśnięty

Podczas tworzenia aplikacji, która akceptuje naciśnięcia klawiszy użytkownika, możesz również monitorować pod kątem klawiszy modyfikatora, takich jak klawisze SHIFT, ALT i CTRL. Po naciśnięciu klawisza modyfikatora w połączeniu z innymi klawiszami lub kliknięciem myszy aplikacja może odpowiednio odpowiedzieć. Jeśli na przykład litera S jest naciśnięta, może to spowodować wyświetlenie "s" na ekranie, ale jeśli naciśnięcie klawiszy CTRL+S spowoduje zapisanie bieżącego dokumentu. Jeśli obsłużysz KeyDown zdarzenie, właściwość KeyEventArgs odebranego przez program obsługi zdarzeń określa, Modifiers które klawisze modyfikatora są naciskane. Alternatywnie właściwość KeyData właściwości KeyEventArgs określa znak, który został naciśnięty, a także wszelkie klawisze modyfikujące połączone z bitowym OR. Jeśli jednak obsługujesz KeyPress zdarzenie lub zdarzenie myszy, program obsługi zdarzeń nie otrzymuje tych informacji. W takim przypadku należy użyć ModifierKeys właściwości Control klasy . W obu przypadkach należy wykonać bitową wartość AND odpowiedniej Keys wartości i testowane wartości. Wyliczenie Keys oferuje odmiany każdego klucza modyfikatora, dlatego ważne jest, aby wykonać bitowe operacje AND z poprawną wartością. Na przykład klucz SHIFT jest reprezentowany przez Shift, ShiftKey, RShiftKey a LShiftKey poprawna wartość do przetestowania shift jako klucz modyfikatora to Shift. Podobnie, aby przetestować klawisze CTRL i ALT jako modyfikatory, należy użyć Control odpowiednio wartości i Alt .

Uwaga

Programiści języka Visual Basic mogą również uzyskiwać dostęp do kluczowych informacji za pośrednictwem Keyboard właściwości

Aby określić, który klawisz modyfikatora został naciśnięty

  • Użyj operatora bitowego AND z właściwością ModifierKeys i wartością Keys wyliczenia, aby określić, czy jest naciśnięty określony klawisz modyfikatora. Poniższy przykład kodu pokazuje, jak określić, czy klawisz SHIFT jest naciskany w programie obsługi zdarzeń 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
    

Zobacz też