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 != && !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());//转成整数显示
}

C# 如何捕获键盘按钮和组合键以及KeyPress/KeyDown事件之间的区别 (附KeyChar/KeyCode值)的更多相关文章

  1. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验九:PS/2模块③ — 键盘与多组合键

    实验九:PS/2模块③ — 键盘与多组合键 笔者曾经说过,通码除了单字节以外,也有双字节通码,而且双字节通码都是 8’hE0开头,别名又是 E0按键.常见的的E0按键有,<↑>,<↓ ...

  2. jquery 监控文本框键盘事件(回车事件),附常用keycode值。

    $(function(){ $(".search").keydown(function(event) { ) { //执行操作 } }) ); 完整的 key press 过程分为 ...

  3. C#中如何判断键盘按键和组合键

    好记性不如烂笔头子,现在记录下来,不一定会有很详尽的实例,只写最核心的部分. C# winform的窗体类有KeyPreview属性,可以接收窗体内控件的键盘事件注册.窗体和控件都有KeyDown,K ...

  4. C#窗体模拟键盘按键(组合键)产生事件 ---- 通过keybd_event()函数

    如何模拟键盘按键触发产生的事件,比如模拟按下Alt + F4 关闭当前程序,Ctrl+Shift 切换输入法等 可以通过win32api 键盘事件 keybd_event() 来实现 1.定义键盘按键 ...

  5. C#窗体如何通过keybd_event()函数模拟键盘按键(组合键)产生事件

    如何模拟键盘按键触发产生的事件,比如模拟按下Alt + F4 关闭当前程序,Ctrl+Shift 切换输入法等 可以通过win32api 键盘事件 keybd_event() 来实现 1.定义键盘按键 ...

  6. CTR+A组合键 以及终止按键事件传递

    Key UP 或Down 事件中 实现CTR+A全选 if ( Control.ModifierKeys==Keys.Control && e.KeyCode == Keys.A)   ...

  7. 键盘按钮keyCode大全:获取按键对应的键值的方法

    没有大全,只有方法,授人与鱼不如授人于渔: 下面这行代码,大家可以打在控制台里,直接进行测试: document.body.onkeyup = function (e) { e = e || wind ...

  8. js简单的设置快捷键,hotkeys捕获键盘键和组合键的输入

    设置快捷键 这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb). hotkeys on Githubhotkeys预览 创建 您将需要在您的系 ...

  9. Hotkeys.js 2.0.2 发布,捕获键盘输入和输入的组合键快捷键,它没有依赖

    这是一个强健的 Javascript 库用于捕获键盘输入和输入的组合键,它没有依赖,压缩只有只有(~3kb),gzip:1.9k. 更新内容: 添加测试用例: 添加更多特殊键支持: 修复bug. __ ...

随机推荐

  1. cocos2d之json使用实例

    前端使用: json管理器中函数解析: 对宠物技能map的定义: 宠物技能表单--数据的基础定义:

  2. Tomcat源码分析之—具体启动流程分析

    从Tomcat启动调用栈可知,Bootstrap类的main方法为整个Tomcat的入口,在init初始化Bootstrap类的时候为设置Catalina的工作路径也就是Catalina_HOME信息 ...

  3. sed入门详解教程

    sed是一个比较古老的,功能十分强大的用于文本处理的流编辑器,加上正则表达式的支持,可以进行大量的复杂的文本编辑操作.sed本身是一个非常复杂的工具,有专门的书籍讲解sed的具体用法,但是个人觉得没有 ...

  4. Javascript parseFloat内部解析规则

    这是由小习发的一个问题引起的讨论,结束后大家各自加深了多parseFloat的理解. 如下 16进制数0x10使用parseFloat转成数字,结果为0.潜意识期望的结果是16. 有人说脑残,16进制 ...

  5. node js学习(一)

    1.简介 JavaScript是一种运行在浏览器的脚本,它简单,轻巧,易于编辑,这种脚本通常用于浏览器的前端编程,但是一位开发者Ryan有一天发现这种前端式的脚本语言可以运行在服务器上的时候,一场席卷 ...

  6. 单机搭建Android开发环境(一)

    老话,工欲善其事必先利其器.为了学习安卓系统开发,我下了血本,更换了电脑.俗语,磨刀不误砍柴工,好钢用在刀刃上,为了发挥新本的最大潜能,我花费了很长时间去做配置和优化,都感觉有点偏执了.不过,从到目前 ...

  7. AC日记——二叉树最大宽度和高度 1501 codevs

    1501 二叉树最大宽度和高度  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver     题目描述 Description   给出一个二叉树,输出它的最大宽 ...

  8. HTTP图解

    本节内容 俗话说好的开发,底层知识必须过硬,不然再创新的技术,你也理解不深入,比如python web开发工程师,想要学习任何一个框架,底层都是http和socket,底层抓牢了,学起来会很轻松,所以 ...

  9. strcmp()&&mb_ereg_replace()&&ereg()

    主要记录两个函数,一个是strcmp(),一个是mb_ereg_replace() strcmp() php 5.3 以后字符串和数组比较会返回0 测试代码: PHP <?php $passwo ...

  10. (转载)ORA-14452:试图创建,更改或删除正在使用的临时表中的索引

    因为表kol_xx_fin050_temp 为临时表,而且有其他session正在使用. 处理步骤: 1.先从 dba_objects / user_objects中查询到该表的object_id: ...