Как нажимать 3 клавиши одновременно с помощью нажатия клавиши?

#c# #winforms #keypress

#c# #winforms #нажатие клавиши

Вопрос:

Возможно ли получить 3 клавиши одновременно на KeyPress ? Я хочу получить Ctrl H T . . .

Я попробовал ff:

 if (e.KeyCode == Keys.H amp;amp; e.Modifiers == Keys.Control)
{
    if (e.KeyCode == Keys.T amp;amp; e.Modifiers == Keys.Control)
    {
        Console.WriteLine("^");
    }
}
  

Но, похоже, не работает. Я думаю, e.keyCode возвращает только одну клавишу за раз? Итак, я все еще думаю о том, как я могу это сделать… или возможно сохранение предыдущего ключа в переменной? Заранее спасибо

Комментарии:

1. Вероятно, единственный на 100% надежный способ сделать это — вызвать функцию API GetAsyncKeyState . Смотрите также статью MSDN на msdn.microsoft.com/en-us/library/windows/desktop /…

Ответ №1:

Это должно сработать (я протестировал это, и, похоже, оно делает то, что вам нужно).

Если вы нажмете Ctrl H, это установит логическую переменную. Затем, если вы нажмете Ctrl T сразу после этого, он обнаружит, что обе клавиши были нажаты последовательно. Если вы нажмете что-нибудь, кроме Ctrl T, это вернет флагу значение False.

 private bool isCtrlHPressed;

private void txt_callerName_KeyDown(object sender, KeyEventArgs e)
{
    if (isCtrlHPressed amp;amp; e.KeyCode == Keys.T amp;amp; e.Modifiers == Keys.Control)
        Console.WriteLine("^");

    isCtrlHPressed = (e.KeyCode == Keys.H amp;amp; e.Modifiers == Keys.Control);
}
  

Комментарии:

1. я соглашусь с этим, поскольку нахожу это самым простым ответом. спасибо @GrantWinney

2. Что, если нажать Ctrl H, затем отпустить клавишу H, а затем нажать клавишу T? Я думаю, вам понадобится KeyUp обработчик событий для обработки этого случая. И даже тогда его, вероятно, можно обмануть.

Ответ №2:

попробуйте это

 Keys key1 = Keys.None;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (key1 == Keys.H amp;amp; e.Modifiers == Keys.Control amp;amp; e.KeyCode != Keys.ControlKey)
    {
        MessageBox.Show("Key Pressed");
        key1 = Keys.None;
    }
    else if (e.Control amp;amp; key1 == Keys.None amp;amp; e.KeyCode != Keys.ControlKey)
        key1 = e.KeyCode;
    else if (e.Control)
        key1 = Keys.None;
}
  

Комментарии:

1. я просто замечаю каждый раз, когда нажимаю ctrl H anykey, и это сработало… как насчет указания, была ли 2-я клавиша T?

2. вы можете добавить другое условие if (e.KeyCode == Keys.T) в свое первое условие if.

3. 1 за то, что это сработало, но я вижу самый простой ответ от @GrantWinney, все равно большое спасибо, приятель.

4. Это приведет к сбою, если пользователь нажмет Ctrl H, отпустит H, а затем нажмет T. Он сообщит, что все три клавиши отключены, когда на самом деле H был выпущен.

5. @JimMischel если у вас есть какое-либо решение, пожалуйста, опубликуйте его. Обещаю, я поддержу это.

Ответ №3:

используйте приведенный ниже код:

  if (e.KeyCode == Keys.X amp;amp; e.Control amp;amp; e.Shift) {
        // CTRL SHIFT X was pressed!
    }
  

Комментарии:

1. вы должны внимательно прочитать вопрос, прежде чем публиковать ответ, иначе вы можете получить голоса, отклоненные. OP хочет использовать несколько клавиш с одним модификатором, точно так же, как Visual Studio Code Beautifier Ctrl K D .

Ответ №4:

Попробуйте использовать это

 if (e.Control amp;amp; e.KeyCode == Keys.H amp;amp; e.KeyCode == Keys.T)
{
    Console.WriteLine("^");
}
  

ИЛИ попробуйте и это

 if (e.Modifiers == Keys.Control amp;amp; e.KeyCode == Keys.H amp;amp; e.KeyCode == Keys.T) 
{
    Console.WriteLine("^");
}
  

Комментарии:

1. потрясающе ..!! можете ли вы сказать мне, как вы можете хранить два ключа в объекте одного Keys типа?