textbox.Focus () не работает в C # - PullRequest
41 голосов
/ 04 января 2011

мне интересно, почему этот код не может сфокусировать текстовое поле ...?

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 ]

98 голосов
/ 04 января 2011

Используйте Select() вместо:

recipientEmail_tbx.Select();

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

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

4 голосов
/ 18 ноября 2017

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

Task.Delay(100).ContinueWith(_ =>
     {
         Application.Current.Dispatcher.Invoke(new Action(() =>
         {
             TextBoxNAme.Focus();
         }));
     });
3 голосов
/ 30 июля 2014

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

private void txtBox_LayoutUpdated(object sender, EventArgs e)
{
    txtBox.Focus();
}
0 голосов
/ 05 июля 2019

Используйте обработчик событий Form_Activation вместе с логическим значением 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();
        }

    }
...