C# form捕捉方向键事件
在C# Form中监听键盘输入事件本身是很简单的,但是如果是想监听键盘上的上下左右这四个方向键,实现起来有所不同。下面我就以一个Demo简单陈述一下实现过程。
一、为了让界面能够监听键盘事件,必须实现以下代码:
1 public Form1()
2 {
3 InitializeComponent();
4 this.KeyPreview = true;//让界面能够捕捉到键盘事件
5 this.Cursor.Dispose();//在主界面中禁用鼠标
6 }
line5:让鼠标移到form上时消失。(ps:这个demo本意是我想用来做一个类似于劲舞团的小游戏用的,所以进行了改动)
二、C# Form中默认是不监听方向键事件的,所以为了允许实现监听,需要重写方法:ProcessDialogKey,代码如下:
1 /// <summary>
2 /// 重写ProcessDialogKey,来允许监听方向键
3 /// </summary>
4 /// <param name="keycode"></param>
5 /// <returns></returns>
6 protected override bool ProcessDialogKey(Keys keycode)
7 {
8 switch (keycode)
9 {
10 case Keys.Left:
11 case Keys.Up:
12 case Keys.Right:
13 case Keys.Down:
14 return false;
15 }
16 return true;
17 }
当键盘的输入为上下左右的时候,返回false,这样就可以允许KeyDown跟KeyUp方法对方向键的监听。
三、在KeyUp跟KeyDown中进行具体实现。代码如下:
1 /// <summary>
2 /// 监听方向键的KeyDown事件
3 /// </summary>
4 /// <param name="sender"></param>
5 /// <param name="e"></param>
6 private void Form1_KeyDown(object sender, KeyEventArgs e)
7 {
8 switch (e.KeyCode)
9 {
10 case Keys.Left:
11 buttonLeft.BackgroundImage = Resources.left;
12 break;
13 case Keys.Up:
14 buttonUP.BackgroundImage = Resources.up;
15 break;
16 case Keys.Right:
17 buttonRight.BackgroundImage = Resources.right;
18 break;
19 case Keys.Down:
20 buttonDown.BackgroundImage = Resources.down;
21 break;
22 }
23 }
24 /// <summary>
25 /// 监听方向键的KeyUp事件
26 /// </summary>
27 /// <param name="sender"></param>
28 /// <param name="e"></param>
29 private void Form1_KeyUp(object sender, KeyEventArgs e)
30 {
31 switch (e.KeyCode)
32 {
33 case Keys.Left:
34 buttonLeft.BackgroundImage = Resources.left_dark;
35 break;
36 case Keys.Up:
37 buttonUP.BackgroundImage = Resources.up_dark;
38 break;
39 case Keys.Right:
40 buttonRight.BackgroundImage = Resources.right_dark;
41 break;
42 case Keys.Down:
43 buttonDown.BackgroundImage = Resources.down_dark;
44 break;
45 }
46 }
监听事件中实现的功能很简单,就是对表示方向的四个按钮进行背景图片的转换,以来表示当前所按的具体的哪一个方向键。具体效果如下:

界面比较简单,虽然是丑了点。^.^,仅当演示demo所用。
以上!
C# form捕捉方向键事件的更多相关文章
- Atitit。监听键盘上下左右方向键事件java js jquery c#.net
Atitit.监听键盘上下左右方向键事件java js jquery c#.net 1. Keyword1 2. 通用的实现流程1 3. Js的实现1 3.1. Bind control ,eve ...
- 如何订阅Form的自定义事件
Window Form类有很多的属性/方法和事件,其中事件属于一种发布订阅模式 .订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主体对象.这个主体对象在自身状态变化时,会通知所 ...
- form的onsubmit事件--表单提交前的验证最佳实现方式
今天遇到了一个问题,页面中include了很多的公共页面(都是没有form的),并且里面好多的地方都是自行提交的(页面中加入一个type=“submit”域,然后js中写入sumbit.click来执 ...
- js 捕捉滚动条事件
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- C#中Form的Paint事件响应方法与重载虚方法OnPaint()的区别
Form_Paint()方法是Paint事件的响应方法,OnPaint是可重载的虚方法,OnPaint方法是调用Paint事件的,用哪一个,效果是一样,就看那一个方便了内部是这样实现的: protec ...
- vue+element Form键盘回车事件页面刷新解决
问题描述:如下代码所示,使用element-ui 中的el-form组件对table进行条件查询,当查询条件仅有一项时,使用@keyup.enter.native事件绑定回车事件,出现点击回车后,浏览 ...
- OpenCV waitKey 无法正常捕捉方向键(上下左右),总结和解决方案,可以用waitKeyEx
在win10+python+opencv3.4.5,测试 while True: key = cv2.waitKey(0) print('key =', key) 依次按上.下.左.右方向键,输出: ...
- C++ Win32控制台应用程序捕捉关闭事件
#include#includebool ctrlhandler( DWORD fdwctrltype ){ switch( fdwctrltype ) { // handle ...
- js监听键盘方向键事件
<SCRIPT language=javascript> document.onkeydown = chang_page; function chang_page() { || ) loc ...
随机推荐
- 「JOISC 2014 Day1」 历史研究
「JOISC 2014 Day1」 历史研究 Solution 子任务2 暴力,用\(cnt\)记录每种权值出现次数. 子任务3 这不是一个尺取吗... 然后用multiset维护当前的区间,动态加, ...
- 「ZJOI2014」璀灿光华
「ZJOI2014」璀灿光华 实际上,可以不用建水晶立方体... 因为,发光水晶的方向都要枚举一遍. 只需知道发光水晶每个方向有哪些水晶就可以了. 对于一个发光水晶,将它连接的水晶标号. 从该水晶bf ...
- Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources failed.
说明 今天发现这个错误,然后整体检查了一下代码,没有发现任何错误,最后没法只有来一步一步排查. 解决 确定pom文件是否有问题 如上图,有红色波浪线,代表错误,请检查并解决,还有版本是否冲突,最好把不 ...
- mac不能用ip访问项目的, 还有80端口不能开启的问题
开启80端口 参考这篇文章 解决mac无法使用80端口问题,亲测可用 1. 防火墙设置问题 2. 网卡问题 3. 服务器地址配置问题
- JSP中的请求转发与重定向
在说请求转发和重定向之前,得了解下JSP九大内置对象中的response和request response:将服务器端数据发送到客户端,可通过在客户端浏览器中显示,用户浏览页面的重定向以及在客户端创建 ...
- vue单页面应用打包后相对路径、绝对路径相关问题
原文链接: vue单页面应用打包后相对路径.绝对路径相关问题展开 在项目开发过程中,在部署过程中,用到了反向代理,这就要求前端代码中不能使用绝对路径.但是我们知道,一般情况下,通过web ...
- nginx中的模块分类及常见核心模块有哪些
1.模块分类 核心模块:是 Nginx 服务器正常运行必不可少的模块,提供错误日志记录 .配置文件解析 .事件驱动机制 .进程管理等核心功能 标准HTTP模块:提供 HTTP 协议解析相关的功能,比如 ...
- WebGPU 中消失的 FBO 和 RBO
目录 1 WebGL 中的 FBO 与 RBO 1.1 帧缓冲对象(FramebufferObject) 1.2 颜色附件与深度模板附件的真正载体 1.3 FBO/RBO/WebGLTexture 相 ...
- requests实现接口测试
python+requests实现接口测试 - get与post请求基本使用方法 http://www.cnblogs.com/nizhihong/p/6567928.html Requests ...
- Solution -「洛谷 P5787」「模板」二分图(线段树分治)
\(\mathcal{Description}\) Link. \(n\) 个结点的图,\(m\) 条形如 \((u,v,l,r)\) 的边,表示一条连接 \(u\) 和 \(v\) 的无向 ...