C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)_c# keypress-程序员宅基地

技术标签: C#  按键  

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

1、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 都不能捕获。 

2、KeyPress事件

Winform文本框只能输入数字和退格键和小数点:

private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar) && e.KeyChar != '.')
    {
        e.Handled = true;
    }
}
//或者 
private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
    if (e.KeyChar != '\b' && !Char.IsDigit(e.KeyChar) && e.KeyChar != '.')
    {
        e.Handled = true;
    }
}

3、KeyChar取值:

另外2个特殊ASCII码:回车=13,换行=10,退格='\b' 或者 退格=8

4、KeyDown事件:

捕获单个按键:

 

private void Form1_KeyDown(object sender, KeyEventArgs e) 
{ 
       Keys key = e.KeyCode; 
       if (e.Control!=true)//如果没按Ctrl键 
return; 
       switch (key) 
       { 
            case Keys.NumPad0: 
                //按下小键盘0以后 
                break; 
            case Keys.NumPad1: 
                //按下小键盘1以后 
                break; 
            case Keys.S: 
                //按下S键以后 
                break; 
            case Keys.Up: 
                //按下向下键以后 
                break; 
       } 
} 

 

捕获组合键(以全选为例):

 

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.Control && e.KeyCode == Keys.A)
    {
        (sender as TextBox).SelectAll();
    }
}

 

5、KeyCode取值: 
keycode    8 = BackSpace BackSpace 
keycode    9 = Tab Tab 
keycode   12 = Clear 
keycode   13 = Enter 
keycode   16 = Shift_L 
keycode   17 = Control_L 
keycode   18 = Alt_L 
keycode   19 = Pause 
keycode   20 = Caps_Lock 
keycode   27 = Escape Escape 
keycode   32 = space space 
keycode   33 = Prior 
keycode   34 = Next 
keycode   35 = End 
keycode   36 = Home 
keycode   37 = Left 
keycode   38 = Up 
keycode   39 = Right 
keycode   40 = Down 
keycode   41 = Select 
keycode   42 = Print 
keycode   43 = Execute 
keycode   45 = Insert 
keycode   46 = Delete 
keycode   47 = Help 
keycode   48 = 0 equal braceright 
keycode   49 = 1 exclam onesuperior 
keycode   50 = 2 quotedbl twosuperior 
keycode   51 = 3 section threesuperior 
keycode   52 = 4 dollar 
keycode   53 = 5 percent 
keycode   54 = 6 ampersand 
keycode   55 = 7 slash braceleft 
keycode   56 = 8 parenleft bracketleft 
keycode   57 = 9 parenright bracketright 
keycode   65 = a A 
keycode   66 = b B 
keycode   67 = c C 
keycode   68 = d D 
keycode   69 = e E EuroSign 
keycode   70 = f F 
keycode   71 = g G 
keycode   72 = h H 
keycode   73 = i I 
keycode   74 = j J 
keycode   75 = k K 
keycode   76 = l L 
keycode   77 = m M mu 
keycode   78 = n N 
keycode   79 = o O 
keycode   80 = p P 
keycode   81 = q Q at 
keycode   82 = r R 
keycode   83 = s S 
keycode   84 = t T 
keycode   85 = u U 
keycode   86 = v V 
keycode   87 = w W 
keycode   88 = x X 
keycode   89 = y Y 
keycode   90 = z Z 
keycode   96 = KP_0 KP_0 
keycode   97 = KP_1 KP_1 
keycode   98 = KP_2 KP_2 
keycode   99 = KP_3 KP_3 
keycode 100 = KP_4 KP_4 
keycode 101 = KP_5 KP_5 
keycode 102 = KP_6 KP_6 
keycode 103 = KP_7 KP_7 
keycode 104 = KP_8 KP_8 
keycode 105 = KP_9 KP_9 
keycode 106 = KP_Multiply KP_Multiply 
keycode 107 = KP_Add KP_Add 
keycode 108 = KP_Separator KP_Separator 
keycode 109 = KP_Subtract KP_Subtract 
keycode 110 = KP_Decimal KP_Decimal 
keycode 111 = KP_Divide KP_Divide 
keycode 112 = F1 
keycode 113 = F2 
keycode 114 = F3 
keycode 115 = F4 
keycode 116 = F5 
keycode 117 = F6 
keycode 118 = F7 
keycode 119 = F8 
keycode 120 = F9 
keycode 121 = F10 
keycode 122 = F11 
keycode 123 = F12 
keycode 124 = F13 
keycode 125 = F14 
keycode 126 = F15 
keycode 127 = F16 
keycode 128 = F17 
keycode 129 = F18 
keycode 130 = F19 
keycode 131 = F20 
keycode 132 = F21 
keycode 133 = F22 
keycode 134 = F23 
keycode 135 = F24 
keycode 136 = Num_Lock 
keycode 137 = Scroll_Lock 
keycode 187 = acute grave 
keycode 188 = comma semicolon 
keycode 189 = minus underscore 
keycode 190 = period colon 
keycode 192 = numbersign apostrophe 
keycode 210 = plusminus hyphen macron 
keycode 211 = 
keycode 212 = copyright registered 
keycode 213 = guillemotleft guillemotright 
keycode 214 = masculine ordfeminine 
keycode 215 = ae AE 
keycode 216 = cent yen 
keycode 217 = questiondown exclamdown 
keycode 218 = onequarter onehalf threequarters 
keycode 220 = less greater bar 
keycode 221 = plus asterisk asciitilde 
keycode 227 = multiply division 
keycode 228 = acircumflex Acircumflex 
keycode 229 = ecircumflex Ecircumflex 
keycode 230 = icircumflex Icircumflex 
keycode 231 = ocircumflex Ocircumflex 
keycode 232 = ucircumflex Ucircumflex 
keycode 233 = ntilde Ntilde 
keycode 234 = yacute Yacute 
keycode 235 = oslash Ooblique 
keycode 236 = aring Aring 
keycode 237 = ccedilla Ccedilla 
keycode 238 = thorn THORN 
keycode 239 = eth ETH 
keycode 240 = diaeresis cedilla currency 
keycode 241 = agrave Agrave atilde Atilde 
keycode 242 = egrave Egrave 
keycode 243 = igrave Igrave 
keycode 244 = ograve Ograve otilde Otilde 
keycode 245 = ugrave Ugrave 
keycode 246 = adiaeresis Adiaeresis 
keycode 247 = ediaeresis Ediaeresis 
keycode 248 = idiaeresis Idiaeresis 
keycode 249 = odiaeresis Odiaeresis 
keycode 250 = udiaeresis Udiaeresis 
keycode 251 = ssharp question backslash 
keycode 252 = asciicircum degree 
keycode 253 = 3 sterling 
keycode 254 = Mode_switch 

 

6、如何获取键盘按钮的keyChar值(keyCode同理)

private void Form1_KeyPress(object sender, KeyPressEventArgs e)  
{  
    char Key_Char = e.KeyChar;//判断按键的 Keychar  
    MessageBox.Show(((int)(Key_Char)).ToString());//转成整数显示
} 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wobckr/article/details/90897043

智能推荐

html倒计时代码修改,JS实现可调整倒计时间代码分享-程序员宅基地

文章浏览阅读727次。这是一款基于javascript实现可调整倒计时间的代码,我们可以手动调整倒计时间,可以精确到“天、时、分、秒”,而且样式布局也很新颖。先上运行效果图:为大家分享的可调整倒计时间的JS代码如下(浏览器中如果不能正常运行,可以尝试切换浏览模式)。可调整倒计时间的JS代码window.onload=function (){var oFill=document.getElementById('fill_..._speed怎么修改网页倒计时

如何在SDL中自动探测显卡(显示器相关)的分辨率_sdl dpi 设置-程序员宅基地

文章浏览阅读1.8k次。在SDL中要探测显卡的分辨率的话,可以用下面的enumerate_sdl_modes函数。void fatal (int ret, char *format, ...){ va_list ap; fprintf (stderr, "fatal error: "); va_start (ap, format); _sdl dpi 设置

Taro原理总结_taro 原理-程序员宅基地

文章浏览阅读4.8k次,点赞5次,收藏27次。简介Taro 是一套遵循 React 语法规范的 多端开发 解决方案。现如今市面上端的形态多种多样,Web、React-Native、微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端去编写多套代码的成本显然非常高,这时候只编写一套代码就能够适配到多端的能力就显得极为需要。使用 Taro,我们可以只书写一套代码,再通过 Taro 的编译工具,将源代码分..._taro 原理

pip升级失败后:No module named ‘pip‘,ensurepip不可行时的解决方案_pip ensurepip-程序员宅基地

文章浏览阅读2.4k次。ensurepip显示pip在已安装好,但cmd中还是用不了我的电脑上只有前面的satisfied,没有后面的collecting系统变量是没问题的解决用官网的gz包手动安装_pip ensurepip

docker_docker有哪几部分组成-程序员宅基地

文章浏览阅读465次。介绍核心问题1.Docker的五大核心组件 #镜像、容器、镜像仓库、客户端、守护进程(服务端,监控docker容器运行的状态)2.docker的常用操作命令3.docker的状态 # 三种: created创建 up运行 exited关闭4.什么是镜像 #用于存储容器的地方5.容器与镜像的区别 #镜像可以创造很多容器 容器有状态 镜像无状态6.add与copy的区别 #add只拷贝不解压 copy是拷贝并解压7.如何创建私有仓库 8.docker的网络模式 #bridge ho_docker有哪几部分组成

认识WSGI_wsgi 语法-程序员宅基地

文章浏览阅读917次。WSGI是Web Server Gateway Interface的缩写。它是Python专有的一种接口规范(其它语言也有类似的规范,只是名字不一样而已,Python则是第一个提出该规范的语言)。该规范规定了WEB服务器与WEB应用框架之间的通信方式。首先,WEB应用需要提供一个可调用的接口(如:函数);该接口接收2个参数:第一个参数是当前请求所有请求信息的字典对象第二个参数是一个_wsgi 语法

随便推点

hdu 5072 Coprime 容斥原理_hdu 5072 coprime (容斥)-程序员宅基地

文章浏览阅读657次。CoprimeTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1460 Accepted Submission(s): 571Problem DescriptionThere are n peopl_hdu 5072 coprime (容斥)

Prometheus监控平台配置kafka_exporter_kafka_exporter配置文件-程序员宅基地

文章浏览阅读7.1k次,点赞5次,收藏12次。目录1. 前言2.安装配置kafka_exporter3.Prometheus配置4.Grafana配置1. 前言接上一篇Prometheus+Grafana监控部署,环境已经安装完成,本篇进行Prometheus的一些常用监控。Dashboard模板下载(.json文件)Kafka现有开源的集群监控方案:kafka-manager、kafka-monitor、kafka-eagle、KafkaOffsetMonitor,但有所限制监控指标被固化,不易扩展、预警功能弱。..._kafka_exporter配置文件

ReentrantReadWriteLock读写锁的示例_reentrantreadwritelock示例-程序员宅基地

文章浏览阅读364次。结论:Java中ReentrantReadWriteLock对写互斥,对读共享。import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReadWriteLock;import java.util.concurrent.locks.ReentrantReadWriteLock;public cla..._reentrantreadwritelock示例

Scalaz(10)- Monad:就是一种函数式编程模式-a design pattern_scalaz maybe-程序员宅基地

文章浏览阅读913次。Monad typeclass不是一种类型,而是一种程序设计模式(design pattern),是泛函编程中最重要的编程方式,因而很多行内人把FP又称为Monadic Programming。这其中代表的重要性不言而喻。Scalaz是通过Monad typeclass为数据运算的程序提供了一套规范的编程方式,如著名的for-comprehension。而不同类型的Monad实例则会支持不同的程序_scalaz maybe

Vue 原理实现_jvue-程序员宅基地

文章浏览阅读424次。实现vue中的数据驱动视图变化自己实现一套简易框架来完成和vue相似的功能jvue.js// new JVue ({data:{...}})class JVue { constructor(options) { this.$options = options; // 数据响应化 this.$data = options.data; this.observe(this.$data); // // 模拟watcher创建 // new Watcher(_jvue

单片机(八)__ds18b20测试温度_void ds_reset-程序员宅基地

文章浏览阅读949次。首先我们看一下ds18b20的结构图:通过结构图,我们大致能了解一些DS18B20的内部结构,重点是我们要知道,他是如何测温度的,以及温度是怎么计算为我们想要的值的。ds18b20采用的是单总线结构,我们来了解它是如何初始化的:通过它初始化的时序图,我们可以写出程序:void ds_reset()//初始化{ ds = 1;_void ds_reset