研究了一下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事件的使用
本示例中,判断用户是否按下特殊键,如果是,则显示在窗体的标题栏上。

程序主要代码如下:

  private void textBox1_KeyDown(object sender, KeyEventArgs e) { string G_str_Mode = ""; string G_str_text = e.KeyCode + ":" + e.Modifiers + ":" + e.KeyData + ":" + "(" + e.KeyValue + ")"; if (e.Shift == true) G_str_Mode = "Shift 键被按下"; if (e.Control == true) G_str_Mode = "Ctrl 键被按下"; if (e.Alt == true) G_str_Mode = "Alt 键被按下"; this.Text = G_str_text + G_str_Mode; }

  注意:上面的代码中,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事件的使用

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

  程序主要代码如下。

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

相关链接:

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

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

C#控件中的KeyDown、KeyPress 与 KeyUp事件浅谈相关推荐

  1. 控件中一些常用的属性和事件

    1.1常用基本属性 1)Name:表示控件的名称. 2)Enabled:表示控件是否可以对用户交互做出响应. 3)Font:表示控件中显示文字的字体格式,包括字体名称.字号以及是否以斜体.加粗和下划线 ...

  2. KeyDown,KeyPress 和KeyUp 之我谈

    做一个程序,需要实现窗口下的F5 刷新功能. 研究了一下KeyDown,KeyPress 和KeyUp ,发现之间还是有点学问的. 让我们带着如下问题来说明: 1.这三个事件的顺序是怎么样的? 2.K ...

  3. C#控件中的KeyDown、KeyPress 与 KeyUp使用区别

    定义 KeyDown:在控件有焦点的情况下按下键时发生. KeyPress:在控件有焦点的情况下按下键时发生.(下面会说和KeyDown 的区别) KeyUp:在控件有焦点的情况下释放键时发生. Ke ...

  4. WinForm中KeyDown,KeyPress和KeyUp的顺序与区别解析 PreviewKeyDown

    PreviewKeyDown:在焦点位于此控件上的情况下,当有按键动作时发生(在 KeyDown 事件之前发生). 小注: 某些按键,比如 Tab.Return.Esc 和箭头键,通常会被某些控件忽略 ...

  5. 改变Repeater控件中按钮颜色

    昨晚有在论坛看到一帖,手上的工作一直忙到现在,Insus.NET现在抽点时间尝试实现它. Insus.NET没有使用数据库作为数据源,而是使用List<T>作为数据源.因此你在这篇博文中学 ...

  6. C#+AE 调整TOCControl控件中图层的显示顺序

    基本思路如下:利用鼠标左键将需要调整顺序的图层移动至目标位置. ①需要涉及到TOCControl的OnMouseDown事件来获取要调整的图层, ②OnMouseUp事件获得目标图层和索引号, ③再利 ...

  7. 用户控件中动态加入脚本引用

    用户控件中动态加入脚本引用,添加前先判断是否已经有引用,没有才添加. //××××.ascx protected void Page_Load(object sender, EventArgs e){ ...

  8. [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField...

    导言 比起BoundField.CheckBoxField.HyperLinkField以及其他的那些数据字段控件(data field controls)来说,TemplateField提供了一种高 ...

  9. onmouseover和onmouseout在Repeater控件中应用

    如果你曾看过这篇,http://www.cnblogs.com/insus/articles/1411057.html ,它是在GridView控件中演示,但是它的方法在Repeater控件是无法复制 ...

最新文章

  1. 一次项目组聚餐,让我重新认识了很多人
  2. pytorch CrossEntropyLoss用法
  3. mastered skills
  4. Linux常用目录说明
  5. 开启大数据时代谷歌三篇论文-BigTable
  6. 电脑硬件故障的几种简单检查方法
  7. Python 文件writelines() 方法和处理双层列表
  8. [置顶]树莓派Android Things物联网开发:入门及资料汇总
  9. Matlab神经网络十讲(7): Self-Organizing and LVQ Networks
  10. LIBGDX游戏引擎平台介绍与搭建
  11. [LeetCode]: 100: Same Tree
  12. 【Java】数组拷贝的四种方法
  13. 利用触摸屏获取事件坐标
  14. python解析pdf得到每个字符的坐标
  15. shell export 命令
  16. 正态分布初始化 torch.nn.Embedding.weight()与torch.nn.init.normal()的验证对比
  17. 1024 科学计数法(C语言)测试点4详解
  18. 128兆内存能运行的linux,128兆内存能干嘛?
  19. 考PMP试题的经验和对策
  20. android 图片分析,Android ImageView圆形头像 图片完全解析

热门文章

  1. python(进阶篇)——自动化操作Excel(xlrd和xlwt)
  2. vue 数据传输加密、加签、数字信封应用
  3. 2021湖南省地区高考成绩排名查询,湖南高考排名查询方法,2021年湖南高考成绩位次全省排名查询...
  4. 群晖、任务计划、python、虚拟环境
  5. Zebra BI for Excel
  6. U盘不显示盘符的问题
  7. Stm32型号查阅手册
  8. 横河dcs系统配有服务器吗,横河DCS常见问题的解答 转贴
  9. X-Frame-Options to sameorgin
  10. 校园建设的一个实例:校园网规划与设计