zoukankan      html  css  js  c++  java
  • 【转】keypress keydown 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等等这些控制键没有响应。
    本贴来自ZDNetChina中文社区 
    http://bbs.zdnet.com.cn/ ,本贴地址:http://bbs.zdnet.com.cn/viewthread.php?tid=778043


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

    当你按下一个键时(还没松开),就会触发keydown
    事件;当你松开后,又触发了keypress事件。

    即是说keydown只要按下一个键就会触发,而keypress
    要按下并松开后才会触发

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

    from:http://www.cnblogs.com/zhchongyao/archive/2010/01/26/1656701.html

  • 相关阅读:
    LeetCode 75. Sort Colors(按颜色进行排序)
    LeetCode 451. Sort Characters By Frequency(按照字符出现次数对字符串排序)
    LeetCode 347. Top K Frequent Elements(出现频率最多的 k 个元素)
    LeetCode 215. Kth Largest Element in an Array(数组求第k大)
    CF #629 Div.3 E(LCA)F
    系统函数
    CASE表达式
    循环得出数据库中所有的 DB_ID,DB_NAME
    数据库的编码问题
    检验临时表是否存在
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/5492201.html
Copyright © 2011-2022 走看看