问题:
  假设一个winform应用程序,界面上有三个button,那么当一个button获得焦点时,用上下左右按键可以移动焦点我想要的效果就是:
  按上下左右键时,不进行焦点的移动
请问如何实现

解决方案 »

  1.   

    在窗体中重载下面代码        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
            {
                if (keyData == Keys.Left)
                {
                    return true;
                }
                return base.ProcessCmdKey(ref msg, keyData);
            }
      

  2.   

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
    {
      switch (keyData)
      {
      case Keys.Up:
      MessageBox.Show("Up");
      return true;
      case Keys.Down:
      MessageBox.Show("Down");
      return true;
      case Keys.Left:
      MessageBox.Show("Left");
      return true;
      case Keys.Right:
      MessageBox.Show("Right");
      return true;
      }
      return base.ProcessCmdKey(ref msg, keyData);
    }
      

  3.   

    谢谢bdmh,这个方法挺强大的,我还有一个问题想请教一下通过你的方法已经禁用了焦点的移动,另外,我也定制了一个可以接受键盘事件响应的panle,可为什么panel无法处理上下左右的键盘事件呢??其他按键都可以
      

  4.   

    谢谢各位,就我第二个问题,有何高见呢?我要实现的大致功能是:点击button,然后将焦点移动到一个定制panel,然后改panel需要响应上下左右的按键事件通过上面的方法可以在panel聚焦时,按上下左右按键时,不会失去焦点,但为何对上下左右没有响应呢?
      

  5.   

    switch (keyData)
                {
                 case Keys.Up:
                 case Keys.Down:
                 case Keys.Left:
                 case Keys.Right:
                   if(button1.Focused)
                    return true;
                }