研究了一下KeyDown,KeyPress 和KeyUp ,发现之间还是有点学问的。

让我们带着如下问题来说明,如果你看到这些问题你都知道,那么这篇文章你就当复习吧:)

1.这三个事件的顺序是怎么样的?

2.KeyDown 触发后,KeyUp是不是一定触发?

3.三个事件的定义

4.KeyDown、KeyUp 和KeyPress 之间的区别

5.如何区分是否按的是小键盘?

6.PrScrn按键三个事件能够捕获吗?

7.{菜单键}和{开始键}KeyPress能够捕获吗?

8.如何捕获系统的组合键?

9.通过什么方式捕获PrScrn按键事件?

(一)键事件按下列顺序发生:

  1. KeyDown

  2. KeyPress

  3. KeyUp

(二)KeyDown触发后,不一定触发KeyUp,当KeyDown 按下后,拖动鼠标,那么将不会触发KeyUp事件。

(三)定义

KeyDown:在控件有焦点的情况下按下键时发生。

KeyPress:在控件有焦点的情况下按下键时发生。(下面会说和KeyDown 的区别)

KeyUp:在控件有焦点的情况下释放键时发生。

(四)KeyPress 和KeyDown 、KeyPress之间的区别

1.KeyPress主要用来捕获数字(注意:包括Shift+数字的符号)、字母(注意:包括大小写)、小键盘等除了F1-12、SHIFT、Alt、Ctrl、Insert、Home、PgUp、Delete、End、PgDn、ScrollLock、Pause、NumLock、{菜单键}、{开始键}和方向键外的ANSI字符
             KeyDown 和KeyUp 通常可以捕获键盘除了PrScrn所有按键(这里不讨论特殊键盘的特殊键)

2.KeyPress 只能捕获单个字符

KeyDown 和KeyUp 可以捕获组合键。

3.KeyPress 可以捕获单个字符的大小写

4.KeyDown和KeyUp 对于单个字符捕获的KeyValue 都是一个值,也就是不能判断单个字符的大小写。

5.KeyPress 不区分小键盘和主键盘的数字字符。

KeyDown 和KeyUp 区分小键盘和主键盘的数字字符。

6.其中PrScrn 按键KeyPress、KeyDown和KeyUp 都不能捕获。

(五)系统组合键的判定

在使用键盘的时候,通常会使用到CTRL+SHIFT+ALT 类似的组合键功能。对于此,我们如何来判定?

通过KeyUp 事件能够来处理(这里说明一下为什么不用KeyDown,因为在判定KeyDown的时候,CTRL、SHIFT和ALT 属于一直按下状态,然后再加另外一个键是不能准确捕获组合键,所以使用KeyDown 是不能准确判断出的,要通过KeyUp 事件来判定 )

这里简单的列举出CTRL+其它键的组合判定代码:


private void Form3_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.Control)
            {
                MessageBox.Show("KeyUp:Ctrl+" + e.KeyValue.ToString());
            }
        }

(六)捕获PrScrn按键事件

通过一种钩子的方式可以判定PrScrn 按键事件,钩子可以获取任何键盘事件。

这里给出CodeProject 上面的开源代码的解决方案。大家有兴趣自己研究吧:)。

C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]的更多相关文章

  1. C#控件中的KeyDown、KeyPress 与 KeyUp事件浅谈

    研究了一下KeyDown,KeyPress 和 KeyUp 的学问.让我们带着如下问题来说明: 1.这三个事件的顺序是怎么样的? 2.KeyDown 触发后,KeyUp是不是一定触发? 3.三个事件的 ...

  2. Java中sleep方法和wait的详细区别

    1.两者的区别 对于sleep()方法,我们首先要知道该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. 这两个方法来自不同的类分别是Thread和Object 最主要是 ...

  3. js中keydown和keypress的区别

    keydown和keypress这些事件是当一个对象具有焦点时进行按下或松开一个键时发生的. keydown在按下的时候返回键盘上的代码值,然后由TranslateMessage函数翻译成字符,并且由 ...

  4. 在JS/jQuery中,怎么触发input的keypress/keydown/keyup事件?

    怎么触发keypress/keydown/keyup事件? 问题: 1.在之前的写的input后面添加了搜索按钮 2.input只有keyup事件,如下: $("#desktop_folde ...

  5. C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)

    1. 首先将窗口属性KeyPreview设为true,如果属性对话框中找不到,就直接在代码里添加: 2. 添加KeyPress / KeyDown事件: 1.KeyPress 和KeyDown .Ke ...

  6. 键盘事件keydown、keypress、keyup随笔整理总结(摘抄)

    原文1:http://www.cnblogs.com/silence516/archive/2013/01/25/2876611.html 原文2:http://www.cnblogs.com/leo ...

  7. 【转】keypress keydown keyup 区别

    KeyPress主要用来接收字母.数字等ANSI字符,而 KeyDown 和 KeyUP 事件过程可以处理任何不被 KeyPress 识别的击键,诸如:功能键(F1-F12).编辑键.定位键以及任何这 ...

  8. [转]Delphi : keydown与keypress的区别,组合键

    Shift 是一个集合变量. type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDoubl ...

  9. 详解键盘事件(keydown,keypress,keyup)

    一.键盘事件基础 1.定义 keydown:按下键盘键 keypress:紧接着keydown事件触发(只有按下字符键时触发) keyup:释放键盘键 顺序为:keydown -> keypre ...

随机推荐

  1. 分布式日志1 用c#的队列写日志

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  2. DataTime格式化大全(转载)

    //c datetime 格式化 DateTime dt = DateTime.Now; Label1.Text = dt.ToString();//2005-11-5 13:21:25 Label2 ...

  3. 2227 邮票--FUoj(链接表+树的直径)

    http://acm.fzu.edu.cn/problem.php?pid=2227 我感觉这道题可以随意搞 题目大意: 给你的一个图就是一条链,但是不知道起始点和结束点,而且每个点只会访问一次. 因 ...

  4. Intellij Idea 12 开发Android 报Caused by: java.lang.UnsatisfiedLinkError: FindLibrary return null;

    这次开发是用的百度地图api,导入两个so文件,结果启动的时候总是报Caused by: java.lang.UnsatisfiedLinkError: findlibrary return null ...

  5. table中的标题行冻结的简单实现

    这里只是简单的实现,主要是用了position属性的fixed属性值,这个属性值需要高版本浏览器的支持,如果要兼容低版本的浏览器可以通过写脚本的方式实现,也可以使用UI库,有些UI库里面表格插件的标题 ...

  6. 正则表达式匹配完整img标签php实现

    处理html富文本的时候,碰到批量处理img标签,要把img标签格式化,并且去除不用的代码,class,各种data-等,首先想到使用正则匹配,然后处理匹配到的img标签和参数,经过一番尝试终于搞定了 ...

  7. ifram,framset 互相调用JS

    window.parent.frames["Indexbanner3"].aa(); http://blog.163.com/wenchangqing_live/blog/stat ...

  8. pullToRefresh下拉刷新上拉加载

    PullToRefresh 是一个第三方的工程. 之前的自定义下拉刷新控件貌似不太好用,于是网上找了这个. 参考:http://www.cnblogs.com/summers/p/4343964.ht ...

  9. 『TCP/IP详解——卷一:协议』读书笔记——03

    2013-08-17 17:31:49 1.7 分用 分用(Demultiplexing):这是一个过程——当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议上的报文首 ...

  10. 河南省第六届ACM程序设计大赛

    C:  最舒适的路线 (并查集) #include<cstdio> #include<cstring> #include<iostream> #include< ...