之前做WinForm窗体时总是使用Tab键来控制焦点,今天突然感觉用Enter键控制焦点挺方便的,但是使用Tab键控制焦点是VS默认的,要使用Enter键来控制焦点就要自己写事件了,但是如果窗体上需要控制焦点的控件太多的话,每个事件都需要写一个KeyDown事件来设置下一个控件的焦点就有点太麻烦了。。。这里向大家推荐两种比较简单的方法

第一种:KeyDown事件

首先按照要获取焦点的顺序设置好TabIndex的值,然后就是写一个KeyDown事件,然后把所有要获取焦点的控件都绑定这个事件

        private void txtName_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                   // ProcessTabKey(true);
                   SendKeys.Send("{Tab}");
            }
        }

if里面的两句代码效果一样,功能就是把回车键转化为Tab键,这种方法的弊端就是每个控件都要绑定事件,而且如果中间有一个控件的Enable为false的话该事件就失效了。

第二种:重写OnKeyPress方法

        protected override void OnKeyPress(KeyPressEventArgs e)
        {
            if (e.KeyChar == 13)
            {
                SelectNextControl(this.ActiveControl, true, true, true, true);
            }
            base.OnKeyPress(e);
        }

        private void form1_Load(object sender, EventArgs e)
        {

               this.KeyPreview = true;

        }

这种方法的好处就是不用每个控件都绑定事件了,而且即使中间有控件Enable为false也不影响。