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 ...
随机推荐
- 解决SpringBoot连接Nacos集群报400问题
问题描述 搭建一个Nacos集群,使用 SpringBoot 程序连接 Nacos 集群,在启动的时候报异常,程序启动失败,而后程序假死.详细控制台日志信息如下: failed to req API: ...
- Spring Boot一些基础配置
1.定制banner,Spring Boot项目在启动的时候会有一个默认的启动图案: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ...
- xargs、sort、uniq命令
xargs.sort.uniq命令,我们由LeetCode的一道题来引入,并使用加以理解: 题目是这样的:写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率. word ...
- Struts2中的过滤器
过滤器: 过滤器可以处理用户的请求和程序响应的内容,可用于权限控制.编码转换的场合.过滤器是servlet规范中的一部分,不是只有Struts2有. 使用过滤器之前你得定义一个过 ...
- Java线程--Phaser使用
原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11867895.html Java线程--Phaser使用, 代码里头有详细注释: packag ...
- 基于Hexo的博客管理恢复
若重装电脑或更换电脑后 该如何恢复博客的管理? 1.确保之前博客源代码文件夹及文件保存在公库或私库中 例如: 我这里采用的是闭源存放方案,故为私库 这是源码文件样式 2.在新电脑上重新安装git,no ...
- Solution Set - Border Theory
我发现写 Solution Set 就不用写每道题的题意了,岂不美哉? 首先是一些奇妙结论. 定理 1(弱周期定理) 对于字符串 \(S\),若 \(S[:p]\) 和 \(S[:q]\) ...
- Solution -「多校联训」自动机
\(\mathcal{Description}\) Link. 有一个状态集为 \(V\) 的自动机,状态接收 (, ) 和 _(空格) 三种字符,分别编号为 \(0,1,2\),状态 \(u ...
- Solution -「CF 1025D」Recovering BST
\(\mathcal{Description}\) Link. 给定序列 \(\{a_n\}\),问是否存在一棵二叉搜索树,使得其中序遍历为 \(\{a_n\}\),且相邻接的两点不互素. ...
- IDEA自带Http Client替代Postman校验接口
对比Postman的优势 对于数据格式变动可以更为敏锐的观察到.生成的接口请求文件可以同步到代码库,支持多人使用. 使用说明 创建请求文件 使用IDEA,在项目的Scratches下创建Http Re ...