使用C#写ui时,希望能够读取到键盘输入的事件,用于快捷键或者其他操作。本文记录操作创建key event的方法。

参考链接:

  http://csharp.net-informations.com/gui/key-press-cs.htm

  http://net-informations.com/q/faq/arrowkeys.html

创建事件

  • 选中某个需要读取键盘输入事件的控件,例如button,richTextBox等。

  • 选中properties->event之后,列表中都是可以设置的事件。

  • 选中需要的事件,例如KeyPress,然后进行双击, vs就会创建事件并生成代码。

如下图所示:

C#代码

vs自动创建事件的程序之后,在代码中添加自己的功能。

经过测试,ascii码能够获取到,连 control + c(ascii码3)都可以.

        // 每按下一个按键就会触发一次private void richTextBoxReceive_KeyPress(object sender, KeyPressEventArgs e){// 回车键if (e.KeyChar == (char)13) // enter key  {serialPort.Write("\r\n");rtbOutgoing.Text = "";}// control + Celse if (e.KeyChar == (char)3){MessageBox.Show("You pressed control + c");//通过串口发送 control + cbyte[] by = { 0x03 };serialPort.Write(by, 0, by.Length);}// 其他的按键触发的时间不进行处理else if (e.KeyChar < 32 || e.KeyChar > 126){e.Handled = true; // ignores anything else outside printable ASCII range}else{//这里是一个字符一个字符的发送。serialPort.Write(e.KeyChar.ToString());}}

方向键处理

properties的event中没有关于方向键的事件,只需要在代码中重载C#的ProcessCmdKey方法。

对于control + c组合键,采用(Keys.Control | Keys.C)的方式进行判断。如下:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData){//capture up arrow keyif (keyData == Keys.Up){MessageBox.Show("You pressed Up arrow key");return true;}//capture down arrow keyif (keyData == Keys.Down){MessageBox.Show("You pressed Down arrow key");return true;}//capture left arrow keyif (keyData == Keys.Left){MessageBox.Show("You pressed Left arrow key");return true;}//capture right arrow keyif (keyData == Keys.Right){MessageBox.Show("You pressed Right arrow key");return true;}// control + C // 从这里可以看出,ProcessCmdKey函数也能够对单个字母的事件进行处理。例如A-Z,a-z。if (keyData == (Keys.Control | Keys.C)){MessageBox.Show("You pressed control + c");return true;}return base.ProcessCmdKey(ref msg, keyData);}

Tony Liu

2016-9-15, Shenzhen

c# key event相关推荐

  1. tslib: Selected device is not a touchscreen (must support ABS and KEY event types)解决方法

    tslib: Selected device is not a touchscreen (must support ABS and KEY event types) 两种情况:一种内核未加入触摸屏的支 ...

  2. HTML5 元素拖拽实现 及 jquery.event.drag插件

    如上图片: <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" co ...

  3. Zepto源码分析-event模块

    源码注释 // Zepto.js // (c) 2010-2015 Thomas Fuchs // Zepto.js may be freely distributed under the MIT l ...

  4. 树莓派 -- 按键 (key)使用BCM2835 gpio library

    BCM2835 GPIO library介绍 This is a C library for Raspberry Pi (RPi). It provides access to GPIO and ot ...

  5. Tkinter 极简例子——Event篇

    Tkinter Event 鼠标点击事件 from tkinter import *def printcoords(event):print(event.x, event.y)root = Tk()b ...

  6. Redis删除大Key

    原文链接:https://www.dubby.cn/detail.html?id=9112 这里说的大key是指包含很多元素的set,sorted set,list和hash. 删除操作,我们一般想到 ...

  7. html 用event.keycode控制只能输入小写字母,event.keyCode键码值表 附只能输入特定的字符串代码...

    event.keyCode键码值表 附只能输入特定的字符串代码 复制代码 代码如下: function onlyNum() { if(!(event.keyCode==46)&&!(e ...

  8. 浏览器间的差异之 event.keyCode

    先看一段示例代码,在不同浏览器中的行为 <html> <head> <script src="https://cdnjs.cloudflare.com/ajax ...

  9. TvInput Cec key事件传递流程

    一.TV应用MainActivity 1.dispatchInputEvent 这里会特殊处理back键,只有Home键才会退出TV应用,back键会传递给cec连接的device处理.如果按键不在黑 ...

最新文章

  1. android 弹出fragment,Android中ViewPager获取当前显示的Fragment
  2. opencv 斑马线,条纹检测
  3. Imageloader8-压缩图片
  4. Nginx高效学习手册(建议收藏)
  5. 【教程】minicom使用教程
  6. flume快速入门及应用
  7. 程序10 VC编写批量重命名工具
  8. 旗下首发双模5G+双挖孔全面屏!Redmi K30真机谍照曝光
  9. 编程语言对比 基本数据类型
  10. 误差反向传播法(一)【计算图】
  11. unrecognized selector sent to instance的一类解决办法
  12. python 分割不等长字符串表格_python如何将字符串等长分割
  13. c语言小车路径规划算法,基于路径规划的室内小车定位系统
  14. int转byte数组以及相关原理
  15. python在直方图上画折线图_在python中,在柱状图上绘制一个折线图
  16. 一个大型高并发系统的性能调优会涉及到什么?
  17. 通过摄像机视频设备或者流媒体服务器SDK获取到数据转换成RTMP流实现网页手机微信播放
  18. PT100(RTD)三线制四线制测量方案
  19. LuceneSolrElasticSearch-面试题
  20. Google桌面搜索中文版印象(转)

热门文章

  1. cocos2d-x中的尺寸之一
  2. 阶乘、斐波那契数列(java版)
  3. 适合建索引?不适合建索引?分析
  4. Spring延迟依赖注入ObjectFactory/ObjectProvider
  5. JVM常见垃圾收集器
  6. java服务器代码_简单java服务器
  7. 如何进行手机web远程调试——chrome beta
  8. 第12章 元编程与注解、反射
  9. java hashMap缓存简单实现
  10. Android颜色代码对照表