使用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. 【BZOJ】2946: [Poi2000]公共串

    http://www.lydsy.com/JudgeOnline/problem.php?id=2946 题意:给n个串,求最大公共子串.(1<=n<=5,每个串长度<=2000) ...

  2. 【wikioi】1018 单词接龙

    题目链接 算法:DFS+考你阅题 题目描述: 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中 ...

  3. 【BZOJ】3038: 上帝造题的七分钟2(线段树+暴力)

    http://www.lydsy.com:808/JudgeOnline/problem.php?id=3038 这题我就有得吐槽了,先是线段树更新写错,然后不知哪没pushup导致te,精度问题sq ...

  4. COJ559 回文

    试题描述 给定字符串,求它的回文子序列个数.回文子序列反转字符顺序后仍然与原序列相同.例如字符串aba中,回文子序列为"a", "a", "aa&qu ...

  5. 静态页分页功能js代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. 不要使用SBJSON(json-framework)

    不要使用SBJSON(json-framework) 文章目录 不知道为什么,在iOS开发中,有很多人使用 SBJSON (又被称作json-framework)来做JSON解析库.我想这是因为SBJ ...

  7. 【C语言】02-第一个C程序

    由于我们最终要学习的是iOS开发,因此就使用Mac平台下的Xcode搭建C语言开发环境,而不使用Windows系统 如果你是在Windows环境下,可以下载这个简单的C语言学习工具:C/C++程序设计 ...

  8. Shtml妙用

    shtml用的是SSI指令, SSI指令虽然不多 但是功能相对而言还是很强大的, 在PHP禁止了命令执行函数和开了安全模式的时候可以试试看 也可以在服务器允许上传shtml后缀脚本的时候试试 PS:只 ...

  9. 【转】移动Web单页应用开发实践——页面结构化

    1. 前言 在开发面向现代智能手机的移动Web应用的时候,无法避免一个事实,就是需要开发单页应用(Single Page WebApp).对于不同的系统需求,单页应用的粒度会不同,可能是整个系统都使用 ...

  10. CSS3:背景

    细节注意 盒子:border-box | padding-box | content-box用于background-origin背景的开始和background-clip的剪切位置. 渐变也是生成一 ...