Практическое руководство. Определение нажатой управляющей клавиши
При создании приложения, принимающего нажатия клавиш пользователем, также может потребоваться отслеживать наличие клавиш-модификаторов, таких как 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
См. также
.NET Desktop feedback
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе:Отправить и просмотреть отзыв по