Обнаружение нескольких одновременных нажатий клавиш в C #

2

Я хочу подражать гипертерминальной функциональности для моей последовательной связи на С#, обнаружив нажатия клавиш определенных комбинаций клавиш (escape-последовательностей), которые невозможно напечатать, например Ctrl + C, Ctrl + Z и т.д. Я понимаю, что эти ключи имеют свои эквиваленты ASCII и могут передаваться как таковые. Но я столкнулся с проблемами с обнаружением нескольких нажатий клавиш. Некоторые из моих кодов представлены в качестве ссылки:

private void Transmitted_KeyDown(object sender, KeyEventArgs e)
{


   if (e.Modifiers == Keys.Control || e.Modifiers== Keys.Shift || e.Modifiers==Keys.Alt)
   {
       var test = (char)e.KeyValue; // Only able to detect a single keypress!


       ComPort.Write(test.ToString());

   }
} 
Теги:
keypress
detection

3 ответа

6

Если вы ищете обычные ключи, вы можете сохранить их в списке: В KeyDown добавьте ключ в список. В Key Up удалите его из списка. В KeyDown проверьте, что в списке.

Однако я не уверен, что есть клавиши keydown/keyup для клавиш-модификаторов, таких как ctrl, shift, alt. Для них вы можете сделать что-то вроде этого:

bool CtrlDown = ((e.Modifiers & Keys.Control) > 0);
bool CtrlOnlyModifierDown = ((e.ModifierKeys & Keys.Control) == Keys.Control) 
  • 0
    Как я смогу обнаружить комбинации клавиш таким образом?
2

e.KeyCode содержит информацию о значении ключа + модификатора

e.KeyCode = e.KeyValue | e.Modifiers

Используйте e.KeyCode

  • 0
    e.Keycode все еще не работает. Когда я нажимаю Ctrl + C, я только читаю значение ascii для C вместо всей последовательности.
0

Не уверен, что вам повезло.

Но попробуйте этот код:

        switch (e.KeyData)
        {
            case Keys.Control:
                {
                    if (e.KeyData == Keys.Subtract) 
                    { }
                    else if (e.KeyData == Keys.C) 
                    { }
                    break;
                }
        }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню