Практическое руководство. Определение нажатой управляющей клавиши

При создании приложения, принимающего нажатия клавиш пользователем, также может потребоваться отслеживать наличие клавиш-модификаторов, таких как SHIFT, ALT и CTRL. При нажатии клавиши-модификатора в сочетании с другими клавишами или при щелчках мышью приложение может реагировать соответствующим образом. Например, если нажимается клавиша с буквой S, это может просто привести к отображению символов «s» на экране, однако если клавиши CTRL+S нажаты вместе, выполняется сохранение текущего документа. При обработке события KeyDown свойство ModifiersKeyEventArgs, полученного обработчиком событий, указывает, какие клавиши-модификатора нажаты. Кроме того, свойство KeyDataKeyEventArgs указывает символ, который был нажат вместе с любыми клавишами-модификаторами в сочетании с побитовым оператором «ИЛИ». Однако если вы обрабатываете событие KeyPress или событие мыши, обработчик событий не получает эти сведения. В подобных случаях необходимо использовать свойство ModifierKeys класса Control. В любом случае необходимо выполнить побитовый оператор «И» для соответствующего значения Keys и проверяемого значения. Перечисление Keys предлагает различные варианты для каждой клавиши-модификатора, поэтому важно выполнить проверку побитового оператора «И» на предмет правильности значения. Например, клавиша SHIFT представлена и правильным значениями Shift, ShiftKey, RShiftKey и LShiftKey Правильное значение для проверки SHIFT в качестве клавиши-модификатора — Shift. Аналогичным образом, чтобы протестировать клавиши CTRL и ALT в качестве модификаторов, следует использовать Control и Alt значения соответственно.

Примечание.

Программист Visual Basic также могут получить доступ к данным ключа с помощью свойства Keyboard

Определение нажатой клавиши-модификатора

  • Используйте побитовый оператор AND со свойством ModifierKeys и значением перечисления Keys, чтобы определить, нажата ли определенная клавиша-модификатор. В следующем примере кода показано, как определить, нажата ли клавиша SHIFT в обработчике событий 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
    

См. также