zoukankan      html  css  js  c++  java
  • C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]

    研究了一下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 上面的开源代码的解决方案。大家有兴趣自己研究吧:)。

  • 相关阅读:
    剑指Offer-30.连续子数组的最大和(C++/Java)
    剑指Offer-29.最小的K个数(C++/Java)
    UVA 1616 Caravan Robbers 商队抢劫者(二分)
    UVA 10570 Meeting with Aliens 外星人聚会
    UVA 11093 Just Finish it up 环形跑道 (贪心)
    UVA 12673 Erratic Expansion 奇怪的气球膨胀 (递推)
    UVA 10954 Add All 全部相加 (Huffman编码)
    UVA 714 Copying Books 抄书 (二分)
    UVALive 3523 Knights of the Round Table 圆桌骑士 (无向图点双连通分量)
    codeforecs Gym 100286B Blind Walk
  • 原文地址:https://www.cnblogs.com/rosesmall/p/5760078.html
Copyright © 2011-2022 走看看