日期:2014-05-17  浏览次数:21201 次

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

------最佳解决方案--------------------