使用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 + C
else if (e.KeyChar == (char)3)
{
MessageBox.Show("You pressed control + c");
//通过串口发送 control + c
byte[] 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 key
if (keyData == Keys.Up)
{
MessageBox.Show("You pressed Up arrow key");
return true;
}
//capture down arrow key
if (keyData == Keys.Down)
{
MessageBox.Show("You pressed Down arrow key");
return true;
}
//capture left arrow key
if (keyData == Keys.Left)
{
MessageBox.Show("You pressed Left arrow key");
return true;
}
//capture right arrow key
if (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. IBUS-WARNING **: Process Key Event failed: Timeout was reached

    在gvim中ibus敲字时,偶尔会在n秒之后才显示到屏幕,反应死慢.控制台会看到下面的错误信息. (gvim:): IBUS-WARNING **: Process Key Event failed: ...

  2. Android5.0L退出APP横竖屏切换导致的触摸屏输入(Touch Event)无效(冻屏)问题分析(Key Event仍然有效)

    .Nexus4和Nexus5在相同的简单測试下没有重现此问题,因没有源代码所以无法Debug和打印log.兴许会尝试获取nexus的源代码以了解它的改动方案. 二.解决方案 通过初步分析.深入分析.对 ...

  3. Tkinter教程之Event篇(3)

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1823550 '''Tkinter教程之Event篇(3)''''''11.两个事件同时绑定到一 ...

  4. zepto源码学习-04 event

    之前说完$(XXX),然后还有很多零零碎碎的东西需要去分析,结果一看代码,发现zepto的实现都相对简单,没有太多可分析的.直接略过了一些实现,直接研究Event模块,相比JQuery的事件系统,ze ...

  5. jquery利用event.which方法获取键盘输入值的代码

    jquery利用event.which方法获取键盘输入值的代码,需要的朋友可以参考下. 实例 显示按了哪个键: $("input").keydown(function(event) ...

  6. Zepto源码分析-event模块

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

  7. 读Zepto源码之Event模块

    Event 模块是 Zepto 必备的模块之一,由于对 Event Api 不太熟,Event 对象也比较复杂,所以乍一看 Event 模块的源码,有点懵,细看下去,其实也不太复杂. 读Zepto源码 ...

  8. 一个普通的 Zepto 源码分析(三) - event 模块

    一个普通的 Zepto 源码分析(三) - event 模块 普通的路人,普通地瞧.分析时使用的是目前最新 1.2.0 版本. Zepto 可以由许多模块组成,默认包含的模块有 zepto 核心模块, ...

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

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

随机推荐

  1. [原]Android Studio查询SHA1的方法

    前提:C:\Users\Administrator\AndroidStudioProjects文件夹中存在xxx.jks秘钥文件,比如: 进入Android Studio的Terminal: Micr ...

  2. mysql5.6安装

    mysql5.6安装 #卸载原有的mysqlyum remove mysql*ls /etc/my.cnf*mv /etc/my.cnf* /tmp/ #安装依赖包yum install make c ...

  3. [转] - SendMessage、PostMessage原理

    SendMessage.PostMessage原理 本文讲解SendMessage.PostMessage两个函数的实现原理,分为三个步骤进行讲解,分别适合初级.中级.高级程序员进行理解,三个步骤分别 ...

  4. 连接access的语句

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  5. MySql之触发器【过度变量 new old】

    trigger是由事件触发某个操作.这些事件包括insert语句.update语句和delete语句.当数据库执行这些事件时,就会激活触发器执行相应的操作. [1]只有一个执行语句 create tr ...

  6. 解决Ecshop因为动态ip问题登录后台自动退出

    解决Ecshop因为动态ip问题登录后台自动退出 PHP  铁匠  2年前 (2013-07-21)  1130℃  0评论 修改lib_base.php文件real_ip()函数,添加以下代码即可解 ...

  7. C语言 可变参数

    一.基础部分 1.1 什么是可变长参数 可变长参数:顾名思义,就是函数的参数长度(数量)是可变的.比如 C 语言的 printf 系列的(格式化输入输出等)函数,都是参数可变的.下面是 printf ...

  8. regardless of how many processors are devoted to a parallelized execution of this program

    https://en.wikipedia.org/wiki/Amdah's_law Amdahl's law is often used in parallel computing to predic ...

  9. Spark 2.0

    Apache Spark 2.0: Faster, Easier, and Smarter http://blog.madhukaraphatak.com/categories/spark-two/ ...

  10. php常用代码

    $total_count = mysql_num_rows($rslt);//返回记录条数 date("ymdHis");//130618104741 注:年份没有前两位 PHP手 ...