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 事件的区别的更多相关文章

  1. keydown - > keypress - > keyup 用法和区别

    英文输入法:   事件触发顺序:keydown - > keypress - > keyup   中文输入法:   firfox:输入触发keydown,回车确认输入触发keyup chr ...

  2. keydown,keypress,keyup三者之间的区别

    最近看了Javascript高级教程中对过滤输入的介绍,想实现比如电话号码中不能包好非数值的字符,而相应文本中插入字符的操作是keypress事件,所以就想通过阻止这个事件的默认事件行为来阻止这个事件 ...

  3. keydown - > keypress - > keyup

    英文输入法:   事件触发顺序:keydown - > keypress - > keyup   中文输入法:   firfox:输入触发keydown,回车确认输入触发keyup chr ...

  4. 键盘事件之keydown keypress keyup区别

    经过测试,显然事件执行的顺序是: keydown->keypress->keyup. 但是连续按一个按键的话,会一直触发:keydown keypress.直到你提起按键,会触发keyup ...

  5. 部分无线终端不响应键盘事件(keydown,keypress,keyup)的解决办法

    在无线侧实现搜索显示smartbox功能的时候,会对输入框绑定keydown.keyup.keypress事件,从而在检测到输入框的值发生改变时,发出请求拉取smartbox的内容. 但是,在iPho ...

  6. 无线端不响应键盘事件(keydown,keypress,keyup)

    今天在项目时,在android手机上使用输入法的智能推荐的词的话,不会触发keyup事件,一开始想到在focus时使用一个定时器,每隔100ms检测输入框的值是否发生了改变,如果改变了就作对应的处理, ...

  7. <span> <div> 局部 keydown ,keyup事件。页面部分div $(document) 无效,可能焦点,添加焦点。

    前天改一个bug, js 实现的一个 面板拖拉,左右各两个列表,中间面板画线连接,页面左侧列表选中后,key 事件无效.右侧选中确有效,很奇怪,查看源码,左侧选中后,$(document).on(&q ...

  8. (转)KeyDown、KeyUp、KeyPress区别

    Windows窗体通过引发键盘事件来处理键盘输入以响应Windows消息,大多数Windows窗体应用程序都通过处理键盘事件来以独占方式处理键盘输入. 1.按键的类型 Windows窗体将键盘输入标 ...

  9. 转载关于KeyPress和KeyDown事件的区别和联系

    KeyDown:在控件有焦点的情况下按下键时发生. KeyPress:在控件有焦点的情况下按下键时发生. KeyUp:在控件有焦点的情况下释放键时发生. 1.KeyPress主要用来接收字母.数字等A ...

随机推荐

  1. math方法集合

    math.abs(x)     返回数的绝对值.math.acos(x)     返回数的反余弦值.math.asin(x)     返回数的反正弦值.math.atan(x)     以介于 -PI ...

  2. UIButton 头文件常见属性和方法

    UIButton头文件常见属性 1.属性 contentEdgeInsets: default is UIEdgeInsetsZero.设置内容四边距,默认边距为0 @property(nonatom ...

  3. 【.Net】文件并发(日志处理)--队列--Redis+Log4Net

    多线程操作同一个文件时会出现并发问题.解决的一个办法就是给文件加锁(lock),但是这样的话,一个线程操作文件时,其它的都得等待,这样的话性能非常差.另外一个解决方案,就是先将数据放在队列中,然后开启 ...

  4. TSF自定义候选词列表界面

    概述 TSF(Text Service Framework),已经取代IMM(Input Method Manager),成为win8+系统的输入法框架.现在有个需求,触摸屏上要使用软键盘(虚拟键盘, ...

  5. 屏蔽错误:LNK2038

    最近在使用Qt(VS2010编译)的过程中,需要调用COM库,在Qt中加入了QAxContainer模块,是一个LIB库,在把编译模式从Debug改为Release 后链接报告了一堆错误 -1: 错误 ...

  6. PHP的五种常见设计模式

    工厂模式 最初在设计模式 一书中,许多设计模式都鼓励使用松散耦合.要理解这个概念,让我们最好谈一下许多开发人员从事大型系统的艰苦历程.在更改一个代码片段时,就会发生问题,系统其他部分 —— 您曾认为完 ...

  7. win8 VS2010 配制OpenGL

    glut下载地址: http://www.opengl.org/resources/libraries/glut/glutdlls37beta.zip glut.h  ---> C:\Progr ...

  8. docker 配置桥接网络

    2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...

  9. VS2005设置Release模式可调试

    from:http://www.cppblog.com/fwxjj/archive/2009/09/25/97219.html

  10. 《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权

    1.与进程关联的用户ID和组ID 与一个进程关联的ID有一下几个: 实际用户ID和实际组ID标识我们究竟是谁.通常在一个会话间值是不会改变的,但是超级用户进程有方法改变 他们,在以后的进程控制中会进行 ...