C# 从Enter事件中设置焦点的替代方法
我有一个文本框,在某些情况下,在Enter事件中,我需要将焦点设置为不同的文本框 我试过这个密码:C# 从Enter事件中设置焦点的替代方法,c#,winforms,focus,C#,Winforms,Focus,我有一个文本框,在某些情况下,在Enter事件中,我需要将焦点设置为不同的文本框 我试过这个密码: private void TextBox1_Enter(object sender, EventArgs e) { if(_skipTextBox1) TextBox2.Focus(); } 但是这个代码不起作用。之后,我在MSDN上发现: 请勿尝试在Enter、GOTCHOCUS、LEVE、LostFocus、Validating或Validated事件处理程序中设置焦点 那么
private void TextBox1_Enter(object sender, EventArgs e)
{
if(_skipTextBox1) TextBox2.Focus();
}
但是这个代码不起作用。之后,我在MSDN上发现:
请勿尝试在Enter、GOTCHOCUS、LEVE、LostFocus、Validating或Validated事件处理程序中设置焦点
那么,我如何以其他方式处理呢?您可以改为处理事件:
private void TextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Return)
{
e.Handled = true;
TextBox2.Focus();
}
}
推迟执行Focus()方法,直到事件执行完毕。通过使用Control.BeginInvoke()方法优雅地完成。像这样:
private void textBox2_Enter(object sender, EventArgs e) {
this.BeginInvoke((MethodInvoker)delegate { textBox3.Focus(); });
}
或
或
从该文本框的属性设置TabIndex=0
这两种方法都用于在C#,.NET中设置对文本框的焦点,它不是“回车键”,而是“回车事件”。>@亚历克斯-啊,好的,对不起。在这种情况下,我可能会设置一个计时器
,然后在Enter事件中启用它,并将间隔
设置为200ms之类的小值。
textBox.Select();
textBox.Focus();