Как справиться с нажатием клавиш и вверх и вниз? - PullRequest
0 голосов
/ 06 октября 2019

У меня есть класс, который ловит клавиши клавиатуры, и я хочу поймать определенную комбинацию:

Alt + 1 

И в случае обнаружения этой комбинации, чтобы делать мои вещи.

Вот чтоУ меня есть попытка:

private bool isAltPressed;
private bool isOnePressed;
private bool bothPressed;

private void HookManager_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (e.KeyCode == Keys.LMenu)
        isAltPressed = true;
    if (e.KeyCode == Keys.D1)
        isOnePressed = true;
    if (isAltPressed & isOnePressed)
        bothPressed = true;
}

private void HookManager_KeyUp(object sender, System.Windows.Forms.KeyEventArgs e)
{
    if (bothPressed)
        // Do something...

    if (e.KeyCode == Keys.LMenu)
    {
        isAltPressed = false;
        bothPressed = false;
    }

    if (e.KeyCode == Keys.D1)
    {
        isOnePressed = false;
        bothPressed = false;
    }
}

Так, где я должен проверить, что обе клавиши нажаты и отпущены, а затем делать мои вещи?

Ответы [ 2 ]

0 голосов
/ 06 октября 2019

Вам не следует ждать, пока будет выпущена клавиша Alt для выполнения вашего действия. Если вы не можете объяснить, почему вам нужно убедиться, что и клавиша alt, и нажатая клавиша должны быть отпущены перед «выполнением чего-либо», следующего кода должно быть достаточно для вашего KeyUp или KeyDown события.

if (e.Modifiers == Keys.Alt && e.KeyCode == Keys.D1)
{
    // Do Something
}
0 голосов
/ 06 октября 2019

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

if ( e.KeyData == (Keys.Alt | Keys.D1) )

Ключи - это структура, имеющая атрибут флага.

Это означает, что несколько кодов клавиш могут быть объединены с логикой или оператором для формирования результата.

[Flags]
public enum Keys ...
...