您的位置:首页 > 其它

keyDown keyPress keyUp 事件的区别

2014-12-10 15:42 831 查看
一 触发顺序

这里给出一段测试代码:

测试结果为:

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参数的值会改变所显示的字符
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: