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

研究了一下KeyDown,KeyPress 和 KeyUp 的学问。让我们带着如下问题来说明:

1.这三个事件的顺序是怎么样的?
2.KeyDown 触发后,KeyUp是不是一定触发?
3.三个事件的定义
4.KeyDown、KeyUp 和KeyPress 之间的区别
5.如何区分是否按的是小键盘?
6.PrScrn按键三个事件能够捕获吗?
7.{菜单键}和{开始键}KeyPress能够捕获吗?
8.如何捕获系统的组合键?
9.通过什么方式捕获PrScrn按键事件?

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

KeyDown

KeyPress

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 事件来判定 )

(六)捕获PrScrn按键事件

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

在键盘按下键然后释放的过程中有3个事件发生,分别为KeyDown事件、KeyPress事件和KeyUp事件。 KeyDown和KeyUp事件让应用程序捕捉用户在键盘上按下的特殊键或某些特定键甚至组合键,只有在想要取得按下键或特殊键的相关信息时,才用到 KeyDown和KeyUp事件。下面对KeyDown和KeyUp事件分别进行介绍。1.KeyDown事件KeyDown事件在首次按下某个键时发 生。
   示例   KeyDown事件的使用
本示例中,判断用户是否按下特殊键,如果是,则显示在窗体的标题栏上。

程序主要代码如下:

  1. private   void  textBox1_KeyDown( object  sender, KeyEventArgs e)  
  2.   {  
  3.     string  G_str_Mode =  "" ;  
  4.     string  G_str_text = e.KeyCode +  ":"  + e.Modifiers +  ":"  + e.KeyData +  ":"  +  "("  + e.KeyValue +  ")" ;  
  5.     if  (e.Shift ==  true )  
  6.       G_str_Mode = "Shift 键被按下" ;  
  7.     if  (e.Control ==  true )  
  8.       G_str_Mode = "Ctrl 键被按下" ;  
  9.     if  (e.Alt ==  true )  
  10.       G_str_Mode = "Alt 键被按下" ;  
  11.     this .Text = G_str_text + G_str_Mode;  
  12.   }  

  注意:上面的代码中,KeyDown事件取得了一个KeyEventArgs对象e,并返回相关的按键信息,KeyEventArgs参数提供数个属性值,这些属性根据键盘上被按下的按键返回对应值。KeyEventArgs参数的属性值如表所示。

  表  KeyEventArgs属性值
属性值 说明
Control 获取一个值,该值指示是否曾按下Ctrl键
KeyCode 获取KeyDown或KeyUp事件的键盘代码
KeyData 获取KeyDown或KeyUp事件的键数据
KeyData 获取KeyDown或KeyUp事件的键数据
KeyValue 获取KeyDown或KeyUp事件的键盘值
Modifiers 获取KeyDown或KeyUp事件的修饰符标志。这些标志指示按下的Ctrl、Shift和Alt键的组合
Shift 获取一个值,该值指示是否曾按下Shift键

  2.Keyup事件

  Keyup事件在释放键时发生。

  示例 Keyup事件的使用

  本示例实现的是,当程序运行的时候,按完键盘后,自动设置窗体的大小。

  程序主要代码如下。

  1. private   void  frmKeyDownUP_KeyUp( object  sender, KeyEventArgs e)  
  2.    
  3.    {  
  4.      this .ClientSize =  new  System.Drawing.Size(800,100);  
  5.    }  
 

相关链接:

http://www.csharpwin.com/csharpspace/8906r2353.shtml

http://tech.ddvip.com/2008-11/122578952088880.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
v2.1151 1. 解决EnumWindow有时候会卡死的问题 2. KeyDownStr KeyUpStr KeyPressStr更名KeyDownChar KeyUpChar KeyPressChar 增加付费接口KeyPressStr 3. 去掉属性dx.public.keypad.patch,dx.public.keypad.sync和dx.public.mouse.sync. 增加收费接口EnableKeypadPatch EnableKeypadSync EnableMouseSync 4. 解决后台特征码失效的BUG。(上一个版本的问题) 5. 优化FindXXXX等的查询速度. 同时接口FindIntEx FindFloatEx FindDoubleEx FindStringEx FindDataEx参数变更. 6. 解决FindMultiColor和FindMultiColorEx在某些时候会找不到的BUG 7. 加强绑定模式1. 增加付费接口DmGuard 8. 增加付费接口FaqCaptureFromFile 【插件特色】 1. 文字识别领域,目前插件界,识别速度和准确率No.1 7000汉字,全屏识别,只需要几百毫秒,性能强劲! 2. 后台键鼠方面,目前插件界功能最齐全,最强悍的后台键鼠 3. 图色方面,高速找图找色,取色 4. 支持MASM Call代码嵌入执行 【功能特点】 文字识别方面 1. 所有文字识别接口都支持后台gdi 后台gdi2 后台dx 后台dx2 后台dx3 以及前台normal 2. 支持RGB HSV颜色识别 3. 支持RGB HSV差色识别 4. 支持多种颜色混合识别(最多10种) 5. 支持连体字识别 6. 支持背景色识别 7. 支持点阵模糊识别(防杂点干扰) 8. 支持查找指定字符串在屏幕的坐标 9. 支持查找指定字符串在屏幕上的所有坐标 10. 支持在未知文字的情况下进行词组识别 11. 支持在没有字库的情况下,进行词组范围识别 12. 支持多字库,最多10个字库。方便针对不同的情况制作字库. 13. 完全兼容91OCR字库(txt字库,mdb不支持) 14. 支持字库自定义加密解密 15. 支持识别指定图片的文字 16. 支持在代码添加字库 图色方面 1. 所有图色接口都支持后台gdi 后台gdi2 后台dx 后台dx2 后台dx3 以及前台normal 2. 支持颜色查找,多种颜色查找,并可指定搜索的方向以及相似度 3. 支持图形查找,多个图形查找,并可指定搜索的方向以及相似度 4. 支持直接获取某点的颜色(RGB,HSV) 5. 支持直接对某点的颜色进行比较,可指定相似度 6. 可直接对任意区域进行截图,并保存为bmp(24位色) 7. 可获取某范围的RGB和HSV颜色均值 8. 支持图片透明色 9. 支持多图查找 10. 支持直接获取图像数组,方便二次开发 11. 支持多点找色 键鼠方面 1. 所有键鼠接口都支持windows消息模拟,dx以及前台 2. 前台完全模拟,功能和按键自带的完全一样 3. 后台windows消息模拟(类似于按键自带的后台键鼠) 4. dx键盘几乎支持所有游戏后台组合键.(首创) 5. 后台dx (首创,支持大型的3D以及2D游戏键鼠的模拟) 后台方面 1. 两个函数,搞定前后台的切换,非常简单快捷. 窗口方面 1. 支持任意绘制的信息提示窗口,可以随着游戏窗口的移动而移动 2. 信息提示窗口可以鼠标拖动,更加方便快捷 3. 支持获取通过正常手段获取不到的窗口句柄,比如QQ系列游戏 4. 支持枚举窗口 5. 支持获取窗口各种状态 6. 支持对窗口进行各种操作,关闭,最小化等等 内存方面 1. 支持CE格式的内存读取 2. 支持各种数据类型的搜索,以及多次搜索(类似CE) 3. 强力内存接口,按键自带的读不到,可以试试这个 4. 强力的内存写接口(简单游版本不支持) 汇编方面(简单游版本不支持) 1. 支持MASM语法的汇编语句,支持本进程以及目标进程的汇编代码嵌入执行(俗语Call) 2. 支持机器码和MASM语句的互转 答题器 1. 支持前后台的截图发送到服务端 2. 支持前后台的截取动画发送到服务端
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值