中的KeyDown
和KeyPress
事件有.net
什么区别?
中的KeyDown
和KeyPress
事件有.net
什么区别?
Answers:
显然对此有很多误解!
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
在keyData
is Keys.Tab
或时重写并返回false Keys.Shift | Keys.Tab
,那么您将在(On)Key(Down | Press | Up)中看到Tab键。
非字符键不会引发KeyPress事件。但是,非字符键会引发KeyDown和KeyUp事件。
http://msdn.microsoft.com/zh-CN/library/system.windows.forms.control.keypress.aspx
KeyPress仅由可打印字符触发,并在KeyDown事件后触发。根据键入延迟设置,可以有多个KeyDown和KeyPress事件,但只有一个KeyUp事件。
KeyDown
KeyPress
KeyUp
我一直认为按键是在您按下按键后立即发生的,按键是按下并释放按键的动作。
我发现这给出了一些不同的解释:http : //bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
Keydown是在不释放键的情况下按下键,Keypress是一个完整的按下和释放循环。
换句话说,KeyDown + KeyUp = Keypress
来自博客开发者:
为了理解按键和按键之间的区别,理解“字符”和“按键”之间的区别是有用的。一个“关键”是计算机的键盘上的物理按键,而一个“字”是按一个按钮输入的符号。从理论上讲,该keydown和KeyUp事件表示按键被按下或释放,而按键事件表示字符被输入。该理论的实现并非在所有浏览器中都相同。
注意:您也可以尝试使用Key Event Tester(在上述站点上提供)来了解此概念。
释放按键时,无论按下键多长时间,KEYUP只会被捕获一次,因此,如果您只希望捕获一次按键,则KEYUP是适合捕获的事件。
KeyPress
对于从输入生成的每个字符都会触发该事件,这是响应物理按键以及字符是自动重复功能的结果。键盘输入的工作方式记录了此行为。