替代在Enter事件中设置焦点

时间:2010-12-27 13:38:58

标签: c# winforms focus

我有一个文本框,在某些情况下,在Enter事件中,我需要将焦点设置为另一个文本框。

我试过那段代码:

 private void TextBox1_Enter(object sender, EventArgs e)
 {
     if(_skipTextBox1) TextBox2.Focus();
 }

但是这段代码不起作用。之后我在MSDN上找到了:

  

请勿尝试从Enter,GotFocus,Leave,LostFocus,Validating或Validated事件处理程序中设置焦点。

那我该怎么做呢?

3 个答案:

答案 0 :(得分:3)

推迟执行Focus()方法,直到事件执行完毕。使用Control.BeginInvoke()方法优雅地完成。像这样:

    private void textBox2_Enter(object sender, EventArgs e) {
        this.BeginInvoke((MethodInvoker)delegate { textBox3.Focus(); });
    }

答案 1 :(得分:0)

您可以改为处理KeyPress事件:

private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
   if (e.KeyChar == (char)Keys.Return)
   {
      e.Handled = true;
      TextBox2.Focus();
   }
}

答案 2 :(得分:0)

textBox.Select();

textBox.Focus();

或 来自set TabIndex = 0的属性的textBox

这两种方法都用于将注意力设置在 C# .NET

中的textBox