Вопрос

я ловлю KeyDown событие, и мне нужно иметь возможность проверить, являются ли текущие нажатые клавиши: Ctrl + Сдвиг + М ?


Я знаю, что мне нужно использовать e.KeyData из KeyEventArgs, Keys enum и что-то с флагами и битами Enum, но я не уверен, как проверить комбинацию.

Это было полезно?

Решение

Вам необходимо использовать Модификаторы свойство класса 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)

В сочетании с обычными проверками ключей это даст вам ответ, который вы ищете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top