在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捕捉方向键事件的更多相关文章

  1. Atitit。监听键盘上下左右方向键事件java js jquery c#.net

    Atitit.监听键盘上下左右方向键事件java js jquery   c#.net 1. Keyword1 2. 通用的实现流程1 3. Js的实现1 3.1. Bind control ,eve ...

  2. 如何订阅Form的自定义事件

    Window Form类有很多的属性/方法和事件,其中事件属于一种发布订阅模式 .订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主体对象.这个主体对象在自身状态变化时,会通知所 ...

  3. form的onsubmit事件--表单提交前的验证最佳实现方式

    今天遇到了一个问题,页面中include了很多的公共页面(都是没有form的),并且里面好多的地方都是自行提交的(页面中加入一个type=“submit”域,然后js中写入sumbit.click来执 ...

  4. js 捕捉滚动条事件

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  5. C#中Form的Paint事件响应方法与重载虚方法OnPaint()的区别

    Form_Paint()方法是Paint事件的响应方法,OnPaint是可重载的虚方法,OnPaint方法是调用Paint事件的,用哪一个,效果是一样,就看那一个方便了内部是这样实现的: protec ...

  6. vue+element Form键盘回车事件页面刷新解决

    问题描述:如下代码所示,使用element-ui 中的el-form组件对table进行条件查询,当查询条件仅有一项时,使用@keyup.enter.native事件绑定回车事件,出现点击回车后,浏览 ...

  7. OpenCV waitKey 无法正常捕捉方向键(上下左右),总结和解决方案,可以用waitKeyEx

    在win10+python+opencv3.4.5,测试 while True: key = cv2.waitKey(0) print('key =', key) 依次按上.下.左.右方向键,输出: ...

  8. C++ Win32控制台应用程序捕捉关闭事件

      #include#includebool ctrlhandler( DWORD fdwctrltype ){    switch( fdwctrltype )    {    // handle ...

  9. js监听键盘方向键事件

    <SCRIPT language=javascript> document.onkeydown = chang_page; function chang_page() { || ) loc ...

随机推荐

  1. 解决SpringBoot连接Nacos集群报400问题

    问题描述 搭建一个Nacos集群,使用 SpringBoot 程序连接 Nacos 集群,在启动的时候报异常,程序启动失败,而后程序假死.详细控制台日志信息如下: failed to req API: ...

  2. Spring Boot一些基础配置

    1.定制banner,Spring Boot项目在启动的时候会有一个默认的启动图案: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ...

  3. xargs、sort、uniq命令

    xargs.sort.uniq命令,我们由LeetCode的一道题来引入,并使用加以理解: 题目是这样的:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率. word ...

  4. Struts2中的过滤器

    过滤器:            过滤器可以处理用户的请求和程序响应的内容,可用于权限控制.编码转换的场合.过滤器是servlet规范中的一部分,不是只有Struts2有. 使用过滤器之前你得定义一个过 ...

  5. Java线程--Phaser使用

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11867895.html Java线程--Phaser使用, 代码里头有详细注释: packag ...

  6. 基于Hexo的博客管理恢复

    若重装电脑或更换电脑后 该如何恢复博客的管理? 1.确保之前博客源代码文件夹及文件保存在公库或私库中 例如: 我这里采用的是闭源存放方案,故为私库 这是源码文件样式 2.在新电脑上重新安装git,no ...

  7. Solution Set - Border Theory

      我发现写 Solution Set 就不用写每道题的题意了,岂不美哉?   首先是一些奇妙结论.   定理 1(弱周期定理) 对于字符串 \(S\),若 \(S[:p]\) 和 \(S[:q]\) ...

  8. Solution -「多校联训」自动机

    \(\mathcal{Description}\)   Link.   有一个状态集为 \(V\) 的自动机,状态接收 (, ) 和 _(空格) 三种字符,分别编号为 \(0,1,2\),状态 \(u ...

  9. Solution -「CF 1025D」Recovering BST

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),问是否存在一棵二叉搜索树,使得其中序遍历为 \(\{a_n\}\),且相邻接的两点不互素.   ...

  10. IDEA自带Http Client替代Postman校验接口

    对比Postman的优势 对于数据格式变动可以更为敏锐的观察到.生成的接口请求文件可以同步到代码库,支持多人使用. 使用说明 创建请求文件 使用IDEA,在项目的Scratches下创建Http Re ...