Winforms c # - установить фокус на первый дочерний элемент управления TabPage - PullRequest
20 голосов
/ 07 сентября 2008

Скажем, у меня 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;
     }
 }

Мой вопрос:

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

Ответы [ 6 ]

46 голосов
/ 07 сентября 2008

Решение является следующим:

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

Тем не менее, лучший вопрос - почему ... Я не совсем уверен, каков ответ на этот вопрос.

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

14 голосов
/ 11 марта 2009

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

4 голосов
/ 01 марта 2010

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

1 голос
/ 30 марта 2011

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

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

1 голос
/ 12 июня 2009

Вам просто нужно добавить 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);
            }
        }
    }
0 голосов
/ 27 мая 2014
  private void ChildForm1_Load(object sender, EventArgs e)
        {
            ActiveControl = txt_fname;

        }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...