textbox.Focus()无法在C#中工作

时间:2011-01-04 13:37:26

标签: c# .net winforms textbox focus

我想知道为什么这段代码无法关注文本框......?

private void sendEmail_btn_Click(object sender, EventArgs e)
{    
    String sendTo = recipientEmail_tbx.Text.Trim();
    if (!IsValidEmailAddress(sendTo))
    {
        MessageBox.Show("Please Enter valid Email address","Cognex" MessageBoxButtons.OK, MessageBoxIcon.Error);                
        recipientEmail_tbx.Focus();
    }
}

4 个答案:

答案 0 :(得分:97)

改为使用Select()

recipientEmail_tbx.Select();
  

Focus是一种低级方法,主要用于自定义控件作者。相反,应用程序员应该对子控件使用选择方法或ActiveControl属性,或者为表单使用Activate方法。

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx

答案 1 :(得分:4)

将延迟添加一些miliSec。延迟然后调用Focus()并且不要忘记放入Dispatcher

Task.Delay(100).ContinueWith(_ =>
     {
         Application.Current.Dispatcher.Invoke(new Action(() =>
         {
             TextBoxNAme.Focus();
         }));
     });

答案 2 :(得分:2)

即使我尝试了很多上述解决方案,但是当我试图专注于页面加载时,它们都没有为我工作。最后我得到了这个解决方案并且有效。

private void txtBox_LayoutUpdated(object sender, EventArgs e)
{
    txtBox.Focus();
}

答案 3 :(得分:0)

Form_Activated 事件处理程序与firstActivation布尔值结合使用。

private bool firstActivation = true;
private Control firstWindowsControl = null;

...

private void DynamicForm_Activated(object sender, EventArgs e)
{
    if (firstActivation)
    {
        firstActivation = false;
        bool fwcPresent = (firstWindowsControl != null);
        Console.WriteLine($"DynamicForm_Activated: firstWindowControl present: {fwcPresent}");
        if (fwcPresent)
        {
            firstWindowsControl.Focus();
        }

    }