2008-09-07 23 views
19

Digamos que tengo un Textbox anidado en un TabControl.Winforms C# - Establecer el foco en el primer control secundario de TabPage

Cuando se carga el formulario, me gustaría centrarme en ese Textbox (de forma predeterminada, el foco está establecido en TabControl).

Simplemente llamando textbox1.focus() en el evento Load del formulario no parece funcionar.

he sido capaz de enfocarla de la siguiente manera:

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

Mi pregunta es:

¿Hay una manera más elegante de hacer esto?

Respuesta

45

La siguiente es la solución:

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

La mejor pregunta sería sin embargo ser por eso ... No estoy del todo seguro de lo que la respuesta a esa pregunta es.

Editar: Sospecho que tiene algo que ver con el hecho de que tanto el formulario como el TabControl son contenedores, pero no estoy seguro.

14

Intenta ponerlo en el evento Form_Shown(). Debido a que está en un contenedor, poner en Form_Load o incluso el constructor de Form() no funcionará.

+2

No funciona en carga, porque después de la carga, los controles se re-enfocados de acuerdo con el orden de tabulación y el control enfocada es "sobrescrito". Cuando enfoca el control en Se muestra, no hay nada que "sobrescriba" su llamada al enfocar otro control. – Marek

1

Simplemente necesita agregar Control.Select() para su control a este código. Lo he usado para establecer el foco en los controles durante la validación cuando hay errores.

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

Intente utilizar textbox1.Select() en lugar de textbox1.Focus(). Esto me ayudó pocas veces.

1

Tenía un control de usuario dentro de otro control de usuario. textbox1.Select() funcionó para mí pero textbox1.Focus() no funcionó.

También puede intentar configurar Tabstop en falso, textbox1.Focus(), TabStop true.

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

     } 

i utilizar este código funciona bien en el control de ficha victoria o DotNetBar SUPERTAB labores de control

Cuestiones relacionadas