Winforms С# – установить фокус на первый дочерний элемент управления TabPage

StackOverflow https://stackoverflow.com/questions/48680

  •  09-06-2019
  •  | 
  •  

Вопрос

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

Мой вопрос:

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

Это было полезно?

Решение

Решение следующее:

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

Однако лучше спросить, почему...Я не совсем уверен, каков будет ответ на этот вопрос.

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

Другие советы

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

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

Вам просто нужно добавить 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);
            }
        }
    }

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

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

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

        }

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top