답변:
이것에 대해 많은 오해가 있습니다!
사이의 유일한 실질적인 차이점 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는, 윈폼 사용하는 반복마다 정확히 하나에서 KeyDown를 생성하는 반복 횟수를 전송한다.
ProcessDialogKey때 false 를 무시 하고 반환하면 (On) Key (Down | Press | Up)에 Tab 키가 표시됩니다. keyDataKeys.TabKeys.Shift | Keys.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
Handled속성은 KeyUp에 대해 작동하지 않습니다 ( SuppressKeyPress작동하지 않음).
나는 항상 키 다운을 누르는 즉시 키 다운이 발생했다고 생각했습니다. 키 누르기는 키를 눌렀다 떼는 동작입니다.
나는 이것을 약간 다른 설명으로 발견했다 : http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
Keydown은 키를 놓지 않고 키를 누르는 것입니다. Keypress는 완전한 프레스 및 릴리스주기입니다.
달리 말하면, KeyDown + KeyUp = Keypress
에서 블로깅 개발자 :
keydown과 keypress의 차이점을 이해하려면 "character" 와 "key" 의 차이점을 이해하는 것이 유용합니다 . "키" 잠시 컴퓨터 키보드의 물리적 버튼입니다 "문자" 버튼을 눌러 입력 한 상징입니다. 이론적으로를 keyDown과의 keyup 이벤트를 나타냅니다 키 키 누르기 이벤트가 나타내고, 누르거나 놓은되는 문자 입력되는가. 이론의 구현이 모든 브라우저에서 동일하지는 않습니다.
참고 : 위에서 언급 한 사이트에서 제공 되는 주요 이벤트 테스터를 사용하여이 개념을 이해할 수도 있습니다.
키를 누르고있는 시간에 관계없이 키를 눌렀을 때 KEYUP은 한 번만 캡처되므로 이러한 키를 한 번만 캡처하려면 KEYUP이 적합한 이벤트입니다.
KeyPress이벤트 모두 아니라 문자가 자동 반복 기능의 결과 인 경우 물리적 키 누름에 응답하여, 입력으로부터 생성 된 모든 문자에 대해 발생된다. 키보드 입력 작동 방식 이이 동작을 문서화합니다.