Страницы

Поиск по вопросам

вторник, 28 января 2020 г.

Eдиничное нажатие на клавишу

#c_sharp #winforms


У меня есть Пианино в котором при нажатии на кнопку воспроизводится определенный звук.
Как сделать так что бы при нажатии и удержании на клавишу, button1.PerformClick();
срабатывал 1 раз и звук не повторялся.

private void Form1_KeyDown(Object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.D1:
            button1.PerformClick();
            button1.BackColor = System.Drawing.Color.Gray;
            label3.Text = "До / 1";
            label5.Text = "1";
            break;
    }
}

    


Ответы

Ответ 1



Храните в классе переменную bool isPressed. В методе Form1_KeyDown устанавливайте её в true, в методе Form1_KeyUp - в false. Проверяйте, не нажата ли сейчас кнопка в методе Form1_KeyDown через if(!isPressed){...}

Ответ 2



Можно попробовать отключить автоповтор в настройках клавиатуры. Или решить на программном уровне, выставлять флаг нажатия, и если он выставлен, игнорировать KeyDown нажатой клавиши, пока не произойдёт её KeyUp. Правда, есть опасность, что отпускание будет потеряно - у клавиатур есть ограничение на количество одновременно нажатых клавиш, при превышении которого следующие события игнорируются. Да и по другим причинам событие может потеряться.

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

Отправить комментарий