Как узнать, была ли нажата и не отпущена клавиша со стрелкой? - PullRequest
1 голос
/ 17 декабря 2010

Как узнать, была ли нажата и не отпущена клавиша со стрелкой? Событие OnKeyDown отправляется непрерывно ...

РЕДАКТИРОВАТЬ: Мы хотели бы получить только одно уведомление, даже если пользователь нажимает кнопку в течение нескольких минут.

Спасибо.

Ответы [ 3 ]

1 голос
/ 17 декабря 2010

Вы можете создать обнуляемый DateTime, установить текущее время для вашего первого события нажатия клавиши и установить его равным нулю в случае события нажатия клавиши вверх. Если временной интервал превышает выбранное значение, скажем, одну секунду, то пользователь нажимает клавишу.

1 голос
/ 17 декабря 2010

Я предполагаю, что это вопрос Winforms, это не проблема в WPF с классом Keyboard.Отслеживание событий KeyDown и KeyUp ненадежно, вы можете пропустить уведомление, когда ваше приложение получает или теряет фокус с нажатой клавишей.Вам нужна помощь в пинвоке:

    public static class NativeMethods {
        public static bool IsKeyDown(Keys key) {
            return GetKeyState(key) < 0;
        }

        [System.Runtime.InteropServices.DllImport("user32.dll")]
        private static extern short GetKeyState(Keys key);
    }
1 голос
/ 17 декабря 2010

Событие OnKeyUp срабатывает при отпускании ключа. OnKeyDown продолжает стрелять, потому что клавиши повторяются, когда они удерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...