의 이벤트 KeyDown
와 KeyPress
이벤트 의 차이점은 무엇입니까 .net
?
답변
이것에 대해 많은 오해가 있습니다!
사이의 유일한 실질적인 차이점 KeyDown
과 KeyPress
, 즉 KeyPress
문자가 키 누름에 의한 릴레이, 및 존재하는 경우에만 호출된다.
다시 말해, A키보드 를 누르면 다음 과 같은 일련의 이벤트가 발생합니다.
- KeyDown : KeyCode = Keys.A, KeyData = Keys.A, 수정 자 = Keys.None
- KeyPress : KeyChar = ‘a’
- 키업 : KeyCode = Keys.A
그러나 Shift+ 를 누르면 A다음과 같은 결과가 나타납니다.
- KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
- KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
- KeyPress : KeyChar = ‘A’
- 키업 : KeyCode = Keys.A
- KeyUp : KeyCode = Keys.ShiftKey
키를 잠시 누르고 있으면 다음과 같은 결과가 나타납니다.
- KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
- KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
- KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
- KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
- KeyDown : KeyCode = Keys.ShiftKey, KeyData = Keys.ShiftKey, Shift, 수정 자 = Keys.Shift
- KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
- KeyPress : KeyChar = ‘A’
- KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
- KeyPress : KeyChar = ‘A’
- KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
- KeyPress : KeyChar = ‘A’
- KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
- KeyPress : KeyChar = ‘A’
- KeyDown : KeyCode = Keys.A, KeyData = Keys.A | Keys.Shift, Modifiers = 키 .Shift
- KeyPress : KeyChar = ‘A’
- 키업 : KeyCode = Keys.A
- 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
, KeyPress
에 WM_CHAR
, 그리고 KeyUp
에 WM_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 더 “키보드에서 문자를 받았습니다”.
답변
답변
나는 항상 키 다운을 누르는 즉시 키 다운이 발생했다고 생각했습니다. 키 누르기는 키를 눌렀다 떼는 동작입니다.
나는 이것을 약간 다른 설명으로 발견했다 : http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
답변
Keydown은 키를 놓지 않고 키를 누르는 것입니다. Keypress는 완전한 프레스 및 릴리스주기입니다.
달리 말하면, KeyDown + KeyUp = Keypress
