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

363
23 декабря 2016, 11:51

У меня есть Пианино в котором при нажатии на кнопку воспроизводится определенный звук.
Как сделать так что бы при нажатии и удержании на клавишу, 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;
    }
}
Answer 1

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

Answer 2

Можно попробовать отключить автоповтор в настройках клавиатуры.

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

READ ALSO
Протокол парсера номеров

Протокол парсера номеров

Задача такая: существуют определенные строковые представления спецномеров

325
Ошибка: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."

Ошибка: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."

Добрый день, подскажите пожалуйста, с чем может связана ошибка "Попытка чтения или записи в защищенную памятьЭто часто свидетельствует о том,...

1245
Запуск UWP приложения из другой программы

Запуск UWP приложения из другой программы

Есть UWP приложение, его нужно запустить из другой программы, запускexe не удаётся

572