KeyDown.NET 中的和KeyPress事件有什么区别?
KeyDown
KeyPress
显然对这个 有很多 误解!
KeyDown和之间唯一实际的区别KeyPress是它KeyPress传递由按键产生的字符,并且仅在有一个字符时才被调用。
换句话说,如果您按下A键盘,您将获得以下事件序列:
A
但是如果你按Shift+ A,你会得到:
Shift
如果你按住键一会儿,你会得到类似的东西:
请注意,正如许多其他答案所说,KeyPress发生 在 and 之间 KeyDown,KeyUp而 不是 之后,当没有生成字符时不会调用它,并且在按住键时会重复,这也与许多其他答案相反.KeyUp``KeyPress``KeyDown
KeyUp
KeyUp``KeyPress``KeyDown
不 直接导致调用的键示例KeyPress:
确实会 导致调用的键示例KeyPress:
Z
0
9
Spacebar
Tab
Enter
Esc
Backspace
对于好奇的人,KeyDown大致与WM_KEYDOWN、和相关。 可以 调用少于键重复的次数,但它发送一个重复计数,IIRC,WinForms 使用该计数每次重复生成一个 KeyDown。KeyPress``WM_CHAR``KeyUp``WM_KEYUP``WM_KEYDOWN __
WM_KEYDOWN
KeyPress``WM_CHAR``KeyUp``WM_KEYUP``WM_KEYDOWN