C#键盘事件处理

如果你希望用户按F1弹出chm帮助,代码如下:

private void FrmMain_Load(object sender, EventArgs e)
{this.KeyPreview = true;//获取或设置一个值,该值指示在将键事件传递到具有焦点的控件前,窗体是否将接收此键事件。
}private void FrmMain_KeyUp(object sender, KeyEventArgs e)
{if (Keys.F1 == e.KeyCode){//MessageBox.Show("您所按动的键是:" + e.KeyCode.ToString());Help.ShowHelp(this,@"C:\Users\HongYe\Desktop\RevitAPI.chm");}
}

键盘事件是在用户按下键盘上的一个键的时候发生的,可分为两类。第一类是KeyPress事件,当按下的键表示的是一个ASCII字符的时候就会触发这类事件,可通过他的KeyPressEventArgs类型参数的属性KeyChar来确定按下的键的ASCII。使用KeyPress时间无法判断是否按下了修改键(Shift,Alt和Ctrl),为了判断这些动作,就要处理KeyUp 或KeyDown事件,这些时间组成了第二类事件。该类事件有一个KeyEventsArgs类型参数,通过该参数可以测试是否按下了一些修改键。

1.       KeyPressEventArgs类的主属性(KeyPress事件的一个参数类型)
(1).Handle属性:用来获取或设置一个值,该值指示是否处理过KeyPress事件。
(2).KeyChar属性:用来获取按下的键对应的字符,通常是该键的ASCII玛(返回的是键盘的值,如按‘K‘返回就是K)。

2.KeyEventArgs类的主属性(KeyUp和KeyDown事件的一个参数)
(1).Alt属性:用来获取一个值,该值提示是否曾按下了Alt键
(2).Control属性:用来获取一个值,该值提示是否曾按下了Crtl键
(3).Shift属性:用来获取一个值,该值提示是否曾按下了Shift键
(4).Handle属性:用来获取一个值,该值提示是否曾处理过此事件
(5).KeyCode属性:以Keys枚举值返回键盘键的键码,该属性不包含修改键信息,用于测试指定的键盘键
(6).KeyData属性:以Keys枚举值返回键盘键的键码,该属性包含修改键信息,用于判断按下键的所有信息(可返回组合键)
(7).KeyValue属性:以整数形式返回键码,而不是Keys枚举类型值。用于获得所按下键的数字表示
(8).Modifiers属性:以Keys枚举值返回所按下的修改键,仅判断修改键的信息

3.如何在C#程序中定义这些事件:
  C#中描述"KeyDown"、"KeyUp"的事件的Delegate是"KeyEventHandler"。而描述"KeyPress"所用的Delegate是"KeyPressEventHandler"。这二个Delegate都被封装在命名空"Syetem.Windows.Froms"中。为"KeyDown"、"KeyUp"的事件提供数据的类是"KeyEventArgs"。而为"KeyPress"事件提供数据的类是"KeyPressEventArgs"。同样这二者也被封装在命名空间"Syetem.Windows.Froms"中。

  在C#程序定义"KeyDown"、"KeyUp"事件的语法如下:
"组件名称"."事件名称"+= new Syetem.Windows.Froms. KeyEventHandler("事件名称");

  下面是程序中具体实现代码:
button1. KeyUp += new Syetem.Windows.Froms. KeyEventHandler(button1_KUp);

  下面是响应上面事件的基本结构。
private void button1_KUp ( object sender , Syetem.Windows.Froms. KeyEventArgs e )
{
此处加入响应此事件的代码
}

  在C#程序定义"KeyPress"事件的语法如下:
"组件名称"."事件名称"+= new Syetem.Windows.Froms. KeyPressEventHandler("事件名称");

  下面是程序中具体实现代码:
button1. KeyPress += new Syetem.Windows.Froms. KeyPressEventArgs(button1_KPress);

  在完成了事件的定义以后,就要在程序中加入响应此事件的代码,否则程序编译的时候会报错。下面是响应上面事件的基本结构。
private void button1_KPress ( object sender , Syetem.Windows.Froms. KeyPressEventArgs e )
{
此处加入响应此事件的代码

注释:程序中出现的"button1"是定义的一个按钮组件。

例子:
   private void Form1_KeyUp(object sender, KeyEventArgs e)
   {
    MessageBox.Show("您所按动的键是:"+e.KeyCode.ToString());
   }

C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]

最近在做一个程序,需要实现窗口下的F5 刷新功能。

研究了一下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 按键事件,钩子可以获取任何键盘事件。

C#_e.Handled用法

如果你希望用户按F1弹出chm帮助,代码如下:

private void textBoxSize_KeyPress(object sender, KeyPressEventArgs e){// Remove all characters that are not numbers, backspace, or enter.if ((e.KeyChar < 48 || e.KeyChar > 57) &&e.KeyChar != 8 && e.KeyChar != 13){e.Handled = true;}else if (e.KeyChar == 13){// Apply size if the user hits enterTextBox txt = (TextBox)sender;if (txt.Text.Length > 0)ApplyTextSize(txt.Text);e.Handled = true;this.richTextBoxText.Focus();}}

总结:Handled     获取或设置一个值,该值指示是否处理过KeyPress 事件  
           e.Handled = false的时候表示可以接受该事件

e.Handled = true时表示已经处理了事件(即不处理当前键盘事件)

KeyChar     获取或设置与按下的键对应的字符

MSDN帮助 https://msdn.microsoft.com/zh-cn/library/system.windows.forms.keypresseventargs.keychar.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

using System;
using System.Windows.Forms;public class Form1: Form
{public Form1(){// Create a TextBox control.TextBox tb = new TextBox();this.Controls.Add(tb);tb.KeyPress += new KeyPressEventHandler(keypressed);}private void keypressed(Object o, KeyPressEventArgs e){// The keypressed method uses the KeyChar property to check // whether the ENTER key is pressed. // If the ENTER key is pressed, the Handled property is set to true, // to indicate the event is handled.if (e.KeyChar == (char)Keys.Return){e.Handled = true;}}public static void Main(){Application.Run(new Form1());}
}

转载于:https://www.cnblogs.com/lhyqzx/p/5955440.html

C#键盘事件处理(来源网上)相关推荐

  1. 计算器Java代码实现(进行按钮事件处理和键盘事件处理)

    声明: 由于本人是Java初学者,对Java语言理解不是很透彻 以下代码部分参考了许多课本和网上的一些资料,经过本人对这些资料的理解,所以写下了以下程序代码 经运行测试,已经完全实现了计算器的基础功能 ...

  2. 20个优秀的JavaScript 键盘事件处理库

    键盘事件是 Web 开发中最常用的事件之一,通过对键盘事件的捕获和处理可以提高网站的易用性和交互体验.下面,我们向大家介绍收集的20款优秀的 JavaScript 键盘事件处理库,帮助开发人员轻松处理 ...

  3. JavaScript 键盘事件处理

    键盘事件是 Web 开发中最常用的事件之一,通过对键盘事件的捕获和处理可以提高网站的易用性和交互体验.下面,我们向大家介绍收集的20款优秀的 JavaScript 键盘事件处理库,帮助开发人员轻松处理 ...

  4. 【Appium+python】特殊键盘事件处理-国产机型的搜索处理。

    问题原因及概述 在编写脚本的时候,发现华为.OPPE等国产手机无法处理 driver.keyevent('66')# 84搜索键 66回车键 导致PyCharm 反复报错 解决方案 国产机大多为厂商修 ...

  5. 一步一步学Silverlight 2系列(6):键盘事件处理

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  6. java tree类子项的添加和删除_Java学习2-23 JTree节点的删除与添加(来源网上)

    这几天在做关于树的题目,感觉结点的操作有点难度. import java.awt.*; import java.awt.event.*; import javax.swing.*; import ja ...

  7. windows键盘事件处理

    键盘事件 WM_KEYDOWN WM_KEYUP WM_CHAR 点击按键与消息的关系 区别: WM_KEYDOWN:可以识别键盘上的大多数按键,但不能区分大小写字母,以及数字和特殊符号,只能大写字母 ...

  8. QML入门教程(13): 鼠标键盘事件处理

    键盘事件 qml对键盘的处理,处理利用Keys,例如按键按下的处理: pressed(KeyEvent event) This signal is emitted when a key has bee ...

  9. Cocos Creator 键盘事件处理

    1 在onLoad() 中,监听键盘事件 onLoad () { cc.systemEvent.on('keydown', this.onKeyDown, this); } 注意,不是 this.no ...

最新文章

  1. Linux包管理器apt/apt-get发现远程代码执行漏洞
  2. VS2005中ajax安装指南[转]
  3. C语言数组学完学啥,我的c语言学习-数组专题
  4. 安卓注册手机短信验证码验证的案例-01
  5. 利用dbstart和dbshut脚本自动启动和停止数据库的问题
  6. jquery $.get()、$.ajax()与后台servlet交互方法
  7. 【OpenCV】OpenCV实战从入门到精通之 -- 基本图像绘制
  8. mysql 一对多 join_mysql多表left join 1对多的解决办法
  9. 猫癣病毒躲猫猫移师广东东莞月入百万作者
  10. SPSS22.0简体中文破解版(32位/64位)使用方法
  11. ZFAKA-自动发卡收款平台全套搭建教程(含支付接口设置)
  12. html5 canvas 涂鸦画板
  13. 用10行代码实现鉴黄
  14. python生成文字点选验证码→训练yolo目标检测模型→识别文字点选验证码
  15. Nelder-Mead(内德-米德)算法
  16. Java使用iText生成word文 表格、图片、表格里插图片、页眉、页脚、图片页脚、(学习帖)
  17. Ubuntu/linux c开发(4)线程池
  18. C++(10-2)——类的使用
  19. 配置华为防火墙双机热备
  20. Docker中安装python-pcl库

热门文章

  1. Markdown笔记利器:Typora主题-最美的模板
  2. 毕业后成为大厂职业游戏建模师?门槛高不高,一看就知道
  3. npm常用的国内代理
  4. 网络基础之基于距离矢量的动态路由(RIP)
  5. SVG路径(path)中的圆弧(A)指令的语法说明及计算逻辑
  6. Scala開發教程(1): 開始神奇的Scala編程之旅
  7. 2014年中国支付行业的十大事件:突袭、强攻、暗战与围剿
  8. miui系统小米手机应用双开默认登陆设置修改方法步骤
  9. 阻抗测量模型 和阻抗谱分析
  10. pixhawk使用WiFi模块