Пользователь может одновременно нажимать и удерживать только одну кнопку клавиатуры - PullRequest
1 голос
/ 03 сентября 2010

У меня стандартное WinForms-приложение. Я хочу реализовать такую ​​функциональность:

пользователь может одновременно нажимать и удерживать только одну кнопку клавиатуры . Если он попытался нажать кнопку, в то время как нажата другая кнопка, это не даст результата.

PS: это поведение распространяется только на желаемую форму, а не на все формы моего приложения.

C #, 2,0 - 3,5, VS 2008

Ответы [ 2 ]

1 голос
/ 03 сентября 2010

У меня есть нечто похожее, чем Хадажи

private Keys CurrentKey = Keys.None;

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (CurrentKey == Keys.None)
    {
        CurrentKey = e.KeyData;
        // TODO: put your key trigger here
    }
    else
    {
        e.SuppressKeyPress = true;
    }

}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (e.KeyData == CurrentKey)
    {
        // TODO: put you key end trigger here
        CurrentKey = Keys.None;
    }
    else
    {
        e.SuppressKeyPress = true;
    }

}
0 голосов
/ 03 сентября 2010

Я справился с этим довольно быстро, поэтому вам, возможно, придется поработать с ним, чтобы он заработал, но это должно помочь вам начать.

Установите для KeyPreview вашей формы значение true. Поместите в событие KeyDown и KeyUp Event.

Keys MyKey;
bool KeyIsDown = false;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    if (KeyIsDown)
    {
        e.Handled = true;
    }
    else
    {
        MyKey = e.KeyData;
    }
}

private void Form1_KeyUp(object sender, KeyEventArgs e)
{
    if (KeyIsDown)
    {
        if (e.KeyData == MyKey)
        {
            KeyIsDown = false;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...