随笔- 95  文章- 401  评论- 65  阅读- 156万 

C#winForm里键盘事件的响应
1,方向键和回车不能够在KeyDown事件里响应.解决方案是重写ProcessCmdKey
2,其原理并不清晰.base.ProcessCmdKey调用父类的键盘事件.
  KeyDown函数等于在父类里注册了一个事件响应代码.

//在KeyDown事件里无法捕获方向键,回车.能捕获空格之类

        //但是是重写了之后,就不能捕获了.

        private void FrmKeyDown_KeyDown(object sender, KeyEventArgs e)

        {

            //MessageBox.Show(e.KeyCode.ToString());//这里捕获不到方向键

            switch (e.KeyCode)

            {

                case Keys.Right:

                    MessageBox.Show("Right123");

                    break;

                case Keys.Left:

                    MessageBox.Show("Left123");

                    break;

                case Keys.Up://方向键不反应

                    MessageBox.Show("up123");

                    break;

                case Keys.Down:

                    MessageBox.Show("Down123");

                    break;

                case Keys.Space:

                    MessageBox.Show("space123");//空格可以响应

                    break;

                case Keys.Enter:

                    MessageBox.Show("enter123");

                    break;

            }

        }

        //方向键事件的处理,只能重写ProcessCmdKey,重写的方法体可以自动生成,不用担心.

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)

        {

            switch (keyData)

            {

                case Keys.Right:

                    MessageBox.Show("Right");

                    break;

                case Keys.Left:

                    MessageBox.Show("Left");

                    break;

                case Keys.Up://方向键不反应

                    MessageBox.Show("up");

                    break;

                case Keys.Down:

                    MessageBox.Show("down");

                    break;

                case Keys.Space:

                    MessageBox.Show("space");

                    break;

                case Keys.Enter:

                    MessageBox.Show("enter");

                    break;

            }

            //return false;//如果要调用KeyDown,这里一定要返回false才行,否则只响应重写方法里的按键.

            //这里调用一下父类方向,相当于调用普通的KeyDown事件.//所以按空格会弹出两个对话框

            return base.ProcessCmdKey(ref msg, keyData);

        }


 posted on   纳米程序员  阅读(9414)  评论(5编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示