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参数的值会改变所显示的字符
这里给出一段测试代码:
测试结果为:
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参数的值会改变所显示的字符
相关文章推荐
- 键盘事件之keydown keypress keyup区别
- KeyDown、KeyPress和KeyUp事件的区别与联系
- keyDown keyPress keyUp 事件的区别
- keyDown keyPress keyUp 事件的区别
- KeyDown、KeyPress和KeyUp事件的区别与联系
- 键盘事件keypress 和 keydown、keyup 的用法与区别
- javascript KeyDown、KeyPress和KeyUp事件的区别与联系
- keyup,keypress,keydown事件的区别
- 事件文本框键盘事件keydown,keypress,keyup区别
- javascript KeyDown、KeyPress和KeyUp事件的区别与联系
- 键盘事件keydown,keypress,keyup区别
- 键盘事件keydown、keypress、keyup随笔整理总结
- KeyDown,KeyPress 和KeyUp 之区别
- 键盘事件中的keypress事件和keyup事件的区别
- C#控件中的KeyDown、KeyPress 与 KeyUp事件
- javascript keypress与keydown和keyup的区别
- C# 如何关联键盘按钮 (KeyChar/KeyCode值 KeyPress/KeyDown事件 区别)
- C# 如何关联键盘按钮 (KeyChar/KeyCode值 KeyPress/KeyDown事件 区别)
- C#控件中的KeyDown、KeyPress 与 KeyUp事件浅谈