[.net] .NET에서 KeyDown과 KeyPress의 차이점은 무엇입니까?

의 이벤트 KeyDownKeyPress이벤트 의 차이점은 무엇입니까 .net?



답변

이것에 대해 많은 오해가 있습니다!

사이의 유일한 실질적인 차이점 KeyDownKeyPress, 즉 KeyPress문자가 키 누름에 의한 릴레이, 및 존재하는 경우에만 호출된다.

다시 말해, A키보드 를 누르면 다음 과 같은 일련의 이벤트가 발생합니다.

  1. KeyDown : KeyCode = Keys.A, KeyData = Keys.A, 수정 자 = Keys.None
  2. KeyPress : KeyChar = ‘a’
  3. 키업 : KeyCode = Keys.A

그러나 Shift+ 를 누르면 A다음과 같은 결과가 나타납니다.

  1. KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
  2. KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
  3. KeyPress : KeyChar = ‘A’
  4. 키업 : KeyCode = Keys.A
  5. KeyUp : KeyCode = Keys.ShiftKey

키를 잠시 누르고 있으면 다음과 같은 결과가 나타납니다.

  1. KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
  2. KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
  3. KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
  4. KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
  5. KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
  6. KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
  7. KeyPress : KeyChar = ‘A’
  8. KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
  9. KeyPress : KeyChar = ‘A’
  10. KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
  11. KeyPress : KeyChar = ‘A’
  12. KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
  13. KeyPress : KeyChar = ‘A’
  14. KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
  15. KeyPress : KeyChar = ‘A’
  16. 키업 : KeyCode = Keys.A
  17. KeyUp : KeyCode = Keys.ShiftKey

공지 사항 KeyPress이 발생 사이에 KeyDown 하고 KeyUp, 하지KeyUp, 다른 답변의 대부분은 언급 한 바와 같이, 그 KeyPress캐릭터가 생성되지 때 호출되지 않으며, 그 KeyDown키를 누르고있는 동안 다른 답변의 많은 또한, 반대로 반복한다 .

직접 호출 하지 않는 키의 예 KeyPress:

  • Shift, Ctrl,Alt
  • F1 …을 통하여 F12
  • 화살표 키

키의 예 호출에서 결과를 KeyPress:

  • A관통 Z, 0관통 9
  • Spacebar
  • Tab (KeyChar = ‘\ t’, ASCII 9)
  • Enter (KeyChar = ‘\ r’, ASCII 13)
  • Esc (KeyChar = ‘\ x1b’, ASCII 27)
  • Backspace (KeyChar = ‘\ b’, ASCII 8)

호기심의 경우, KeyDown약에 상관 관계 WM_KEYDOWN, KeyPressWM_CHAR, 그리고 KeyUpWM_KEYUP. WM_KEYDOWN 키 반복의 수보다 적은 수라고하지만, IIRC는, 윈폼 사용하는 반복마다 정확히 하나에서 KeyDown를 생성하는 반복 횟수를 전송한다.


답변

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에서 :

주요 이벤트는 다음 순서로 발생합니다.

  1. 키 다운

  2. 키 누름

  3. 키업

또한 KeyPress를 사용하면 작업 이 수행되지 않도록 작업을 ” 처리됨 ” 으로 선언 할 수 있습니다.


답변

나는 항상 키 다운을 누르는 즉시 키 다운이 발생했다고 생각했습니다. 키 누르기는 키를 눌렀다 떼는 동작입니다.

나는 이것을 약간 다른 설명으로 발견했다 : http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event


답변

Keydown은 키를 놓지 않고 키를 누르는 것입니다. Keypress는 완전한 프레스 및 릴리스주기입니다.

달리 말하면, KeyDown + KeyUp = Keypress