2008-09-07 5 views
19

Скажите, что у меня есть Textbox, вложенный в TabControl.Winforms C# - Установить фокус на первое дочернее управление TabPage

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

Просто позвоните textbox1.focus() в Load случае, когда форма не работает.

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

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

Мой вопрос:

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

ответ

45

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

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

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

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

14

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

+2

Это не работает в нагрузке, так как после нагрузки, элементы управления переориентированы в соответствии с табуляции и сфокусированное управление «переписаны». Когда вы фокусируете управление в Shown, ничего не будет «перезаписывать» ваш вызов, фокусируя другой элемент управления. – Marek 2009-12-09 10:46:47

1

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

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

1

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

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

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

     } 

я использую этот код он прекрасно работает на победу вкладок или dotnetbar supertab CONTRL