keyDown keyPress keyUp 事件的区别

一 触发顺序

这里给出一段测试代码:


测试结果为:

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参数的值会改变所显示的字符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值