Я искал, как обнаружить комбинации клавиш в C#.Обнаружить, если комбинация нажатых клавиш - это модификатор и модификатор.
В связи с этим я использую событие KeyDown
формы с KeyPreview = true
.
Мне нужно проверить, есть ли у e.Modifiers
модификатор, а e.KeyCode
- это нечто иное, чем модификатор.
Лучше всего было бы действительно открытое заявление, как:
if(Keys.Modifiers.Contains(e.Modifiers) && !Keys.Modifiers.Contains(e.KeyCode)){}
К сожалению, это не работает.
Это тоже не работает, все это происходит со всеми ключами-модификаторами.
if ((e.Modifiers == Keys.Alt || e.Modifiers == Keys.Control || e.Modifiers == Keys.Shift)
&& (e.KeyCode != Keys.Alt && e.KeyCode != Keys.Control && e.KeyCode != Keys.Shift))
Это почти работает, но нет Keys.AltKey
становится истинным, когда ALT нажата.
if ((e.Modifiers == Keys.Alt || e.Modifiers == Keys.Control || e.Modifiers == Keys.Shift)
&& (e.KeyCode != Keys.Alt && e.KeyCode != Keys.ControlKey && e.KeyCode != Keys.ShiftKey))
Как я мог добиться этого? Должно быть возможно, что e.KeyCode
может быть чем-то вроде модификатора.
Причина: Мне нужно дать пользователю возможность нажимать любую комбинацию клавиш с модификатором хотя бы ONE и по меньшей мере одним другим ключом.
После правильной постановки инструкции, как наилучшим образом сохранить комбинацию в переменной и проверить ее при повторном вводе? Я думал о чем-то вроде сохранения каждого введенного ключа (когда он является модификатором, а другой нет) в List<Keys>
и проверяет его через foreach
, который return false;
, когда один ключ введенной комбинации отсутствует в списке.
Все должно быть максимально динамичным.
Как это можно расширить, чтобы проверить любую комбинацию? Как Ctrl + F + Shift + C
или Ctrl + F + H
Спасибо!
Майкл