keyDown keyPress keyUp  事件的区别

一 触发顺序

显而易见,事件发生的顺序是: keydown --> keypress --> keyup
当按住一个键一段时间后再放开时,结果为:
keydown
keypress
keydown
keypress
keydown
keypress
keydown
keypress
...
keyup
n个keydown和n个keypress,1个keyup,系统设置的时间间隔.
 
 
二 具体区别

KeyPress主要用来接收字母、数字等ANSI字符,
而 KeyDown 和 KeyUP 事件过程可以处理任何
不被 KeyPress 识别的击键,诸如:功能键(
F1-F12)、编辑键、定位键以及任何这些键
和键盘换档键的组合等。与 KeyDown 和
KeyUp 事件不同的是,KeyPress 不显示
键盘的物理状态(SHIFT键),而只是传
递一个字符。KeyPress 将每个字符的大、
小写形式作为不同的键代码解释,即作为两种
不同的字符。而 KeyDown 和 KeyUp 用两种
参数解释每个字符的大写形式和小写形式:
keycode — 显示物理的键(将 A 和 a 作为
同一个键返回)和 shift —指示 shift + key
键的状态而且返回 A 或 a 其中之一。
KeyDown、KeyUp事件是当按下 ( KeyDown )
或松开 ( KeyUp ) 一个键时发生的。
由于一般按下键盘的键往往会立即放开
(这和鼠标不同),所以这两个事件使用哪个差别不大。

keydown 从表现上来看是按下任意键,
按的字符,如果是文本框的话还没有
显示到文本框之前就产生的事件。

keyup 就是在松开按键时发生,
此时字符已经输入到文本框

keypress 整个按键动作完成之后,只响
应字符,对ctrl,alt等等这些控制键没有响应。

虽然从字面理解, KeyDown是按下一个键的意思,
但实际上二者的根本区别是, 系统由KeyDown
返回键盘的代码, 然后由TranslateMessage函数
翻译成成字符, 由KeyPress返回字符值.
因此在KeyDown中返回的是键盘的代码,
而KeyPress返回的是ASCII字符. 所以根据你
的目的, 如果只想读取字符, 用KeyPress,
如果想读各键的状态, 用KeyDown.
说KeyDown是按下, KeyPress是按下并松开,
是不对的. 如果你一直按着键呢? 这时不断地
产生KeyDown和KeyPress.

KeyDown、KeyUp 事件
这些事件是当一个对象具有焦点时按下 ( KeyDown )
或松开 ( KeyUp ) 一个键时发生的。
(要解释 ANSI 字符,应使用 KeyPress 事件。)
KeyPress 事件
此事件当用户按下和松开一个 ANSI 键时发生。
具有焦点的对象接收该事件。一个窗体仅在它
没有可视和有效的控件或 KeyPreview 属性被设置为
True 时才能接收该事件。一个 KeyPress 事件可以
引用任何可打印的键盘字符,一个来自标准字母
表的字符或少数几个特殊字符之一的字符与 CTRL
键的组合,以及 ENTER 或 BACKSPACE 键。
KeyPress 事件过程在截取 TextBox 或
ComboBox 控件所输入的击键时是非常有用的。
它可立即测试击键的有效性或在字符输入时对
其进行格式处理。改变 keyascii
参数的值会改变所显示的字符

04-16 14:33