zoukankan      html  css  js  c++  java
  • winform键盘事件(方向键)的响应

    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);

            }

    
  • 相关阅读:
    AQS的子类在各个同步工具类中的使用情况
    SpringBoot RabbitMQ 延迟队列代码实现
    Java线程状态、线程start方法源码、多线程、Java线程池、如何停止一个线程
    Java内存模型,为啥线程要有自己的本地内存,CPU高速缓存
    Java内存模型中volatile关键字的作用
    Java内存模型、JVM内存结构和Java对象模型
    搞定springboot项目连接远程服务器上kafka遇到的坑以及完整的例子
    MongoDB导出与导入远程Linux服务器上的数据
    DeferredResult使用方式和场景
    【IT笔试面试题整理】二叉树中和为某一值的路径--从根到叶子节点
  • 原文地址:https://www.cnblogs.com/wifi/p/1984451.html
Copyright © 2011-2022 走看看