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 ...
随机推荐
- AT2644 [ARC076C] Connected?
可以发现这个问题是存在边界的,那么我们可以先放宽一下条件思考一下没有边界的情况. 通过手玩可以发现,若不存在边界总是可以完成这个任务的. 因为两条曲线之间不存在交点,那么每次我们可以从空隙穿过一条直线 ...
- C 字符串奇数位小写字母转大写
如题 C实现 #include<stdio.h> #include<string.h> #define COUNT 20 //最大接受字符串数,可以使用动态获取空间函数优化 v ...
- Java中的增强型for循环
下面是关于增强型for循环对一维数组与二维数组遍历的具体实现: public class NewForLoop { public static void main(String[] args) { i ...
- urlencode编码与urldecode解码
转载请注明来源:https://www.cnblogs.com/hookjc/ <script type="text/javascript"><!--functi ...
- Jackson中处理map中的null key 或者null value 及实体字段中的null value
1.map中有null key时的序列化 当有null key时,jackson序列化会报 Null key for a Map not allowed in JSON (use a convert ...
- element select失效问题 , vue刷新的两种方式
changeSelect: function () { this.$forceUpdate(); }, 编辑一条记录,给select 赋值后就不动了, 原因是复制后组件需要刷新一下, 不然不能触发事件 ...
- array_multisort array_merge 排序
前段时间遇到一个排序问题,大致是这样的:$demo = array( 0 => array( 'name' ...
- MySQL基本命令操作及数据库基本概念
MySQL基本命令操作及数据库基本概念 1.数据库的基本概念 2.主流数据库介绍 3.关系型非关系型数据库介绍 4.Mysql 安装方法 5.Mysql 基本操作命令 1.数据库的基本概念: 数据库的 ...
- 啥叫IP地址及子网掩码?
啥叫IP地址及子网掩码 ??? 1.IP地址的定义及分类 1.1IP地址的定义 1.2IP地址的分类 2.子网掩码 1.1 互联网上连接的网络设备和计算机都有唯一的地址,此作为该主机在Interne ...
- 手把手教你实现pynq-z2条形码识别
我是 雪天鱼,一名FPGA爱好者,研究方向是FPGA架构探索和SOC设计. 关注公众号,拉你进"IC设计交流群". 1.前言 单单实现一个二维码识别就花了将近一个星期,这篇文章我就 ...