Кейдаун событие - остыть - PullRequest
       2

Кейдаун событие - остыть

1 голос
/ 12 февраля 2012

У меня есть проект с событием keydown, но, как и при каждом нажатии, я нажимаю на клавишу, и если я нажму на нее, она подождет полсекунды и быстро начнет спамить клавишу.Мне нужно, чтобы это было спамом без охлаждения, что я могу сделать?

Ответы [ 3 ]

2 голосов
/ 12 февраля 2012

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

1 голос
/ 12 февраля 2012

Это называется задержкой повторения клавиатуры, и это общесистемное свойство, которое можно установить в разделе «Клавиатура» на панели управления. Кроме того, вы можете установить его с помощью кода, используя функцию SystemParametersInfo Win32 API, устанавливая флаг SPI_SETKEYBOARDDELAY.

Чтобы вызвать его из C #, вам, вероятно, нужно определить сигнатуру P / Invoke, но, к счастью, кто-то на PInvoke.net уже сделал для нас .

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

0 голосов
/ 12 февраля 2012

Попробуйте использовать Reactive Extensions и используйте один из операторов, связанных со временем, например, Sample или Interval, чтобы достичь того, что вам нужно здесь.

http://msdn.microsoft.com/en-us/data/gg577609

В качестве примера (просто в качестве руководства, набирается без VS)

  Observable.FromEventPattern<KeyPressEventArgs>(this, "KeyPress").Sample(500).....
...