myRoad--control的键事件

这里主要说三个键事件:1.KeyDown;2.KeyPress;3.KeyUp; 文章里的很多说明摘自MSDN

首先是这三个事件的发生顺序及说明:

1.KeyDown : 在控件有焦点的情况下按下键时发生。

2.KeyPress : 在控件有焦点的情况下按下键时发生。

3.KeyUp : 在控件有焦点的情况下释放键时发生。

这里就出现问题了,好像KeyDown和KeyPress事件是一样的,仅有的区别是发生的顺序。是这样吗?

在MSDN里对于对于KeyPress这样的备注:“非字符键不会引发 KeyPress 事件;但非字符键却可以引发 KeyDown 和 KeyUp 事件。”

博客园有位同志对这几个事件的用法做了详细的总结以下红色的是摘自这位同志的文章(这位同志的博客地址):

1.KeyPress主要用来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和方向键外的ANSI字符 KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键)

2.KeyPress 只能捕获单个字符 KeyDown 和KeyUp 可以捕获组合键。

3.KeyPress 可以捕获单个字符的大小写

4.KeyDown和KeyUp 对于单个字符捕获的KeyValue 都是一个值,也就是不能判断单个字符的大小写。

5.KeyPress 不区分小键盘和主键盘的数字字符。KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。

6.其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。

最后还要说明的是KeyPress里的一个属性也就是KeyPressEventArgs.Handled

它在MSDN里的KeyPress事件里的解释是:若要仅在窗体级别处理键盘事件而不允许其他控件接收键盘事件,请将窗体的 KeyPress 事件处理方法中的 KeyPressEventArgs.Handled 属性设置为 true。

MSDN里对它本身的说明是:

1.如果处理过事件,则为 true;否则为 false。(true if the event is handled; otherwise, false.)

2.如果未处理事件,则会将它发送到操作系统进行默认处理。将 Handled 设置为 true,以取消 KeyPress 事件。(If the event is not handled, it will be sent to the operating system for default processing. Set Handled to true to cancel the KeyPress event.)

posted @ 2009-08-07 10:39  风枫峰  阅读(305)  评论(2编辑  收藏  举报