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();
    }
}

Ответ 1

Вместо этого используйте Select():

recipientEmail_tbx.Select();

Фокус - это низкоуровневый метод, предназначенный в первую очередь для авторов пользовательского контроля. Вместо этого программисты приложений должны использовать метод Выбрать или свойство ActiveControl для дочерних элементов управления или метод активации для форм.

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

Ответ 2

Добавить задержку miliSec. Задержка затем вызовите Focus() и не забудьте поместить внутри Dispatcher.

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

Ответ 3

Даже я пробовал много решений, но ни один из них не работал у меня, когда я пытаюсь сосредоточиться на загрузке страницы. Наконец, я получил это решение, и оно сработало.

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

Ответ 4

Используйте обработчик события Form_Activation, добавив логическое значение firstactivation.

private bool firstActivation = true;
private bool firstControl = 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();
        }

    }