#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
типа?