Подтвердить что ты не робот

Winforms С# - Установить фокус на первое дочернее управление TabPage

Скажем, у меня есть Textbox, вложенный в TabControl.

Когда форма загружается, я хотел бы сосредоточиться на этом Textbox (по умолчанию фокус установлен на TabControl).

Просто вызов textbox1.focus() в событии Load формы не работает.

Мне удалось сфокусировать его, выполнив следующие действия:

 private void frmMainLoad(object sender, EventArgs e)
 {
     foreach (TabPage tab in this.tabControl1.TabPages) 
     {
         this.tabControl1.SelectedTab = tab;
     }
 }

Мой вопрос:

Есть ли более элегантный способ сделать это?

4b9b3361

Ответ 1

Ниже приведено решение:

private void frmMainLoad(object sender, EventArgs e)
{
    ActiveControl = textBox1;
}

Лучше будет вопрос, почему... Я не совсем уверен, что ответ на этот вопрос.

Изменить: я подозреваю, что это связано с тем, что и форма, и TabControl являются контейнерами, но я не уверен.

Ответ 2

Попробуйте поместить его в событие Form_Shown(). Поскольку это в контейнере, установка конструктора Form_Load или даже Form() не будет работать.

Ответ 3

Попробуйте использовать textbox1.Select() вместо textbox1.Focus(). Это помогло мне несколько раз.

Ответ 4

Вам просто нужно добавить Control.Select() для вашего элемента управления в этот код. Я использовал это, чтобы установить фокус на элементы управления во время проверки, когда есть ошибки.

private void ShowControlTab(Control ControlToShow)
    {
        if (!TabSelected)
        {
            if (ControlToShow.Parent != null)
            {
                if (ControlToShow.Parent.GetType() == typeof(TabPage))
                {
                    TabPage Tab = (TabPage)ControlToShow.Parent;
                    if (WOTabs.TabPages.Contains(Tab))
                    {
                        WOTabs.SelectedTab = Tab;
                        TabSelected = true;
                        return;
                    }
                }

                ShowControlTab(ControlToShow.Parent);
            }
        }
    }

Ответ 5

У меня был пользовательский контроль внутри другого пользовательского элемента управления. textbox1.Select() работал у меня, но textbox1.Focus() не работал.

Вы также можете попробовать установить Tabstop в false, textbox1.Focus(), TabStop true.

Ответ 6

  private void ChildForm1_Load(object sender, EventArgs e)
        {
            ActiveControl = txt_fname;

        }

Я использую этот код, он отлично работает на панели управления вкладками или в dotnetbar supertab contrl