C#
,
WinForm
中的
KeyDown,KeyPress
和
KeyUp
事件相关知
识点
分类: .Net 2010-12-20 21:02 573 人阅读 评论(0) 收藏 举报
Windows 窗体通过引发键盘事件来处理键盘输入以响应 Windows 消息,大多数 Windows 窗体应
用程序都通过处理键盘事件来以独占方式处理键盘输入。
1.按键的类型
Windows 窗体将键盘输入标识为由按位 Keys 枚举表示的虚拟键代码。使用 Keys 枚举,可以综合
一系列按键以生成单个值,这些值与 WM_KEYDOWN 和 WM_SYSKEYDOWNWindows 消息所伴随
的值相对应。另外,程序开发人员可通过处理 KeyDown 或 KeyUp 事件来检测大多数物理按键操作。
字符键是 Keys 枚举的子集,它们与 WM_CHAR 和 WM_SYSCHAR Windows 消息所伴随的值相对应,
如果通过组合按键得到一个字符,则可以通过处理 KeyPress 事件来检测该字符。
2.键盘事件的顺序
一个控件上可能出现 3 个与键盘相关的事件,下面是这些事件发生的常规顺序:
用户按“a”键,该键将被预处理和调度,而且会发生 KeyDown 事件。
用户按住“a”键,该键将被预处理和调度,而且会发生 KeyPress 事件。
用户松开“a”键,该键将被预处理和调度,而且会发生 KeyUp 事件。
3.键的预处理
像其他消息一样,键盘消息是在窗体或控件的 WndProc 方法中处理的。窗体或控件在处理键盘消
息之前,PreProcessMessage 方法会调用一个或多个方法,这些方法可被重写以处理特殊的字符键和
物理按键。
,
其实我们按下一个键时,KeyDown 和 KeyPress 是都要发生的,而且两个人看上去没有什么区
别。但是其实两者还是有实质的区别的。
例如在一个多行文本框里面输入字符,为什么我们没有定义一个键盘响应事件,但是键盘却响应
了,把字符输入到了文本框呢?其实我觉得因为这个事件就是系统默认的一个消息响应,它就是
KeyPress 。如果你自己还给 KeyPress 定义了自己的响应的话,那么程序会先执行你定义的程序,
然后完成系统要求的显示字符事件的响应过程,但是如果你在自己定义 KeyPress 事件如:
评论0