C#: получение правильных клавиш нажатыми из KeyDvent KeyEventArgs
Я ловлю KeyDown
событие, и я должен быть в состоянии проверить, являются ли текущие нажатые клавиши: Ctrl + Shift + M?
Я знаю, что мне нужно использовать e.KeyData
от KeyEventArgs
, Keys
enum и что-то с Enum Flags и битами, но я не уверен, как проверить комбинацию.
3 ответа
Решение
Вам необходимо использовать свойство Modifiers класса KeyEventArgs.
Что-то вроде:
//asumming e is of type KeyEventArgs (such as it is
// on a KeyDown event handler
// ..
bool ctrlShiftM; //will be true if the combination Ctrl + Shift + M is pressed, false otherwise
ctrlShiftM = ((e.KeyCode == Keys.M) && // test for M pressed
((e.Modifiers & Keys.Shift) != 0) && // test for Shift modifier
((e.Modifiers & Keys.Control) != 0)); // test for Ctrl modifier
if (ctrlShiftM == true)
{
Console.WriteLine("[Ctrl] + [Shift] + M was pressed");
}
Я думаю, что проще всего использовать это:
if(e.KeyData == (Keys.Control | Keys.G))
Вы можете проверить, используя технику, аналогичную следующей:
if(Control.ModifierKeys == Keys.Control && Control.ModifierKeys == Keys.Shift)
Это в сочетании с обычными проверками ключей даст вам ответ, который вы ищете.