KeyDown
中的KeyPress
和.net
事件之间有什么区别?
答案 0 :(得分:280)
显然很多对此有误解!
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。
答案 1 :(得分:69)
KeyPress事件不是由非字符键引发的;但是,非字符键确实会引发KeyDown和KeyUp事件。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx
答案 2 :(得分:8)
KeyPress仅由可打印字符触发,并在KeyDown事件后触发。根据键入延迟设置,可能有多个KeyDown和KeyPress事件,但只有一个KeyUp事件。
的KeyDown
按键
KEYUP
答案 3 :(得分:5)
KeyPress是一个比KeyDown(和KeyUp)更高级别的抽象。 KeyDown和KeyUp是硬件相关的:键盘上键的实际动作。 KeyPress更像是“我从键盘上收到了一个角色”。
答案 4 :(得分:4)
答案 5 :(得分:2)
我一直认为按下按键后就会发生keydown,按下按键是释放按键的动作。
我发现这有一个不同的解释:http://bytes.com/topic/net/answers/649131-difference-keypress-keydown-event
答案 6 :(得分:2)
Keydown正在按键而不释放它,Keypress是一个完整的按下并释放循环。
换句话说,KeyDown + KeyUp = Keypress
答案 7 :(得分:1)
为了理解keydown和keypress之间的区别,了解“character”和“key”之间的区别非常有用。 “key”是计算机键盘上的物理按钮,而“character”是按下按钮键入的符号。理论上,keydown和keyup事件表示按下或释放键,而keypress事件表示键入字符。在所有浏览器中,该理论的实现并不相同。
注意:您还可以试用密钥事件测试程序(在上述网站上提供)来理解这个概念。
答案 8 :(得分:1)
按下按键时,KEYUP只会被捕获一次,无论按下按键多长时间,所以如果你想只捕获一次这样的按键,KEYUP就是适合捕获的事件。
答案 9 :(得分:0)
最简单的解释:
我按住'd'键一秒钟,然后释放。
DDDDDD
keydown事件发生在屏幕上第一个d出现之前,按键事件发生了6次,键盘事件发生在屏幕上最后一个d之后。