首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

C# CS 程序为啥不能响应键盘方向键

2012-12-23 
C# CS 程序为什么不能响应键盘方向键纠结这个问题很久了,我注册了窗体的KeyDown事件,但是,按下按钮与抬起

C# CS 程序为什么不能响应键盘方向键
纠结这个问题很久了,我注册了窗体的KeyDown事件,但是,按下按钮与抬起按钮的时候,没有触发,后来发现是焦点一定要在窗体上,如果新建一个干净的窗体,就能触发,如果添加一个Button就不能触发。
后来我又想到注册当前窗体中所有控件的KeyDown和KeyUp事件,却发现,KeyDown事件不能触发,KeyUp事件能触发,我的需求是想键盘响应上下左方向键。

    
         构造函数
        setKeyDown(this.Controls);
            setKeyUp(this.Controls);
        }

        private void setKeyDown(Control.ControlCollection conc)
        {
            foreach (Control ctl in conc)
            {
                ctl.KeyDown += new KeyEventHandler(ctl_KeyDown);
                if (ctl.HasChildren)
                {
                    setKeyDown(ctl.Controls);
                }
            }
        }

        //按钮按下
        void ctl_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("按下按钮"+e.KeyCode.ToString(), "KeyDown", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

        private void setKeyUp(Control.ControlCollection conc)
        {
            foreach (Control ctl in conc)
            {
                ctl.KeyUp += new KeyEventHandler(ctl_KeyUp);
                if (ctl.HasChildren)
                {
                    setKeyUp(ctl.Controls);
                }
            }
        }

        //按钮抬起
        void ctl_KeyUp(object sender, KeyEventArgs e)
        {
            MessageBox.Show("按钮抬起"+e.KeyCode.ToString(), "KeyUp", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        }

[最优解释]
试试复写  protected override bool ProcessDialogKey(Keys k) 写成你需要的方法..加油


[其他解释]
窗体的keypreview设置为true。
[其他解释]
主窗体获得焦点的时候才有响应吧...
[其他解释]
答案在一楼 this.keypreview = true; 这个属性高成 true 那么窗体就默认接受 没有处理键盘事件的控件键盘事件 
[其他解释]
窗体的属性里先设置下吧。
[其他解释]
该回复于2012-11-18 01:17:25被管理员删除
[其他解释]

引用:
试试复写  protected override bool ProcessDialogKey(Keys k) 写成你需要的方法..加油

[其他解释]
引用:
主窗体获得焦点的时候才有响应吧...


引用:
答案在一楼 this.keypreview = true; 这个属性高成 true 那么窗体就默认接受 没有处理键盘事件的控件键盘事件

没用的,
最后还是用了钩子函数获取消息来实现的。
[其他解释]
引用:
试试复写  protected override bool ProcessDialogKey(Keys k) 写成你需要的方法..加油

这个没去看过,貌似网上很多人用的。

热点排行