Практическое руководство. Определение нажатой управляющей клавиши
Обновлен: Ноябрь 2007
При создании приложения, которое должно реагировать на нажатие клавиш, часто бывает необходимо учитывать состояние клавиш CTRL, SHIFT и ALT. Когда одна из этих клавиш нажата в сочетании с другими клавишами или нажатием кнопки мыши, приложение может реагировать соответствующим образом. Например, если нажата клавиша с буквой S, это может просто привести к появлению "s" на экране, но при нажатии клавиш CTRL + S текущий документ может быть сохранен. При обработке события KeyDown свойство Modifiers объекта KeyEventArgs, получаемого обработчиком события, указывает какие из клавиш CTRL, SHIFT и ALT нажаты. Можно также использовать свойство KeyData объекта KeyEventArgs, которое указывает нажатый знак, а также любую из клавиш CTRL, SHIFT и ALT, объединенную с побитовой операцией ИЛИ. Однако если обрабатывается событие KeyPress или событие мыши, обработчик событий не получает этих сведений. В этом случае необходимо использовать свойство ModifierKeys класса Control. В любом случае, необходимо выполнить побитовую операцию И для соответствующего значения Keys и проверяемого значения. Перечисление Keys предоставляет варианты каждой из клавиш CTRL, SHIFT и ALT, поэтому важно выполнить побитовую операцию И с правильным значением. Например, клавиша SHIFT представляется значениями Shift, ShiftKey, RShiftKey и LShiftKey. Правильным значением для проверки управляющей клавиши SHIFT является Shift. Аналогичным образом, для проверки клавиш CTLR и ALT следует использовать значения Control и Alt соответственно.
![]() |
---|
Программистам на Visual Basic также доступны сведения о клавишах через свойство Keyboard. Дополнительные сведения см. в разделе Объект My.Computer.Keyboard |
Чтобы определить, какая из клавиш CTRL, SHIFT и ALT нажата, выполните следующие действия.
Используйте побитовый оператор AND для свойства ModifierKeys и значения перечисления Keys, чтобы определить нажата ли одна из клавиш CTRL, SHIFT и ALT. В следующем примере кода показано, как определить, нажата ли клавиша SHIFT, внутри обработчика событий KeyPress.
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
public void TextBox1_KeyPress(object sender, KeyPressEventArgs e) { if ((Control.ModifierKeys & Keys.Shift) == Keys.Shift) { MessageBox.Show("Pressed " + Keys.Shift); } }
private: void textBox1_KeyPress(Object^ sender, KeyPressEventArgs^ e) { if ((Control::ModifierKeys & Keys::Shift) == Keys::Shift) { MessageBox::Show("Pressed " + Keys::Shift.ToString()); } }
См. также
Задачи
Практическое руководство. Определение режима CapsLock в Visual Basic