В чем разница между событиями KeyDownи ?KeyPress.net
В чем разница между событиями KeyDownи ?KeyPress.net
Ответы:
По-видимому, есть много недоразумений по этому поводу!
Единственное практическое различие между KeyDownи KeyPressзаключается в том, что он KeyPressпередает символ, полученный в результате нажатия клавиши, и вызывается только при его наличии.
Другими словами, если вы нажмете Aна клавиатуре, вы получите следующую последовательность событий:
Но если вы нажмете Shift+ A, вы получите:
Если вы удерживаете клавиши некоторое время, вы получите что-то вроде:
Обратите внимание , что KeyPressпроисходит между ними KeyDown и KeyUp, не после KeyUp, как многие другие ответы заявили, что KeyPressне вызывается , когда персонаж не генерируется, и что KeyDownповторяется , пока клавиша удерживается в нажатом положении , а также в отличие от многих других ответов ,
Примеры ключей, которые не приводят непосредственно к вызовам KeyPress:
Примеры ключей , которые делают результат в вызовах KeyPress:
Для любопытных, KeyDownгрубо говоря, соотносится с WM_KEYDOWN, KeyPressчтобы WM_CHARи KeyUpчтобы WM_KEYUP. WM_KEYDOWN может вызываться меньше, чем количество повторений клавиш, но отправляет счетчик повторений, который, IIRC, WinForms использует для генерации ровно одного KeyDown за повтор.
ProcessDialogKeyи вернете false, когда keyDataесть Keys.Tabили Keys.Shift | Keys.Tab, тогда вы увидите клавишу Tab в клавише (Вкл.) (Вниз | Нажмите | Вверх).
Событие KeyPress не вызывается не символьными клавишами; однако нехарактерные ключи вызывают события KeyDown и KeyUp.
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
KeyPress запускается только для печатных символов и после события KeyDown. В зависимости от настроек задержки ввода может быть несколько событий KeyDown и KeyPress, но только одно событие KeyUp.
KeyDown
KeyPress
KeyUp
KeyPress - более высокий уровень абстракции, чем KeyDown (и KeyUp). KeyDown и KeyUp связаны с аппаратным обеспечением: фактическое действие клавиши на клавиатуре. KeyPress больше "Я получил символ с клавиатуры".
Из MSDN:
Ключевые события происходят в следующем порядке:
Кроме того, KeyPress дает вам возможность объявить действие как « обработанное », чтобы оно ничего не делало.
Handledсвойство не работает для KeyUp ( SuppressKeyPressтакже не работает).
Я всегда думал, что нажатие клавиши происходит, как только вы нажимаете клавишу, нажатие клавиши - это действие нажатия и отпускания клавиши.
я нашел это, которое дает немного другое объяснение: http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
Keydown нажимает клавишу, не отпуская ее, нажатие клавиши - это полный цикл пресс-релизов.
Другими словами, KeyDown + KeyUp = Keypress
От разработчика блогов :
Чтобы понять разницу между нажатием клавиши и нажатием клавиши, полезно понять разницу между «символом» и «ключом» . «Ключ» является физической кнопкой на клавиатуре компьютера в то время как «символ» является символ набран нажатием кнопки. Теоретически, события нажатия клавиш и нажатия клавиш представляют собой нажатие или отпускание клавиш , в то время как событие нажатия клавиш представляет вводимый символ . Реализация теории не одинакова во всех браузерах.
Примечание: Вы также можете попробовать Key Event Tester (доступен на вышеупомянутом сайте), чтобы понять эту концепцию.
KEYUP будет захвачен только один раз, после отпускания нажатой клавиши, независимо от того, как долго будет удерживаться клавиша, поэтому, если вы хотите захватить такое нажатие только один раз, KEYUP является подходящим событием для захвата.
KeyPressСобытие возникает для каждого символа , генерируемого от входа, как в ответ на прессы физических ключевыми, а также , когда персонаж является результатом функции автоповтора. Как работает ввод с клавиатуры, документирует это поведение.
Самое простое объяснение:
Я удерживал клавишу «d» на секунду, а затем отпустил.
DDDDDD
Событие нажатия клавиши произошло один раз до появления первого d на экране, событие нажатия клавиши произошло 6 раз, а событие keyup произошло после появления последнего d на экране.