Question

Dis que j'ai un Textbox niché dans un TabControl.

Lorsque le formulaire se charge, j'aimerais me concentrer là-dessus Textbox (par défaut, le focus est mis sur le TabControl).

Appeler simplement textbox1.focus() dans le Load l'événement du formulaire ne semble pas fonctionner.

J'ai pu le concentrer en procédant comme suit :

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

Ma question est:

Existe-t-il une manière plus élégante de procéder ?

Était-ce utile?

La solution

Voici la solution :

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

La meilleure question serait cependant de savoir pourquoi...Je ne suis pas entièrement sûr de la réponse à cette question.

Modifier:Je soupçonne que cela a quelque chose à voir avec le fait que le formulaire et le TabControl sont des conteneurs, mais je n'en suis pas sûr.

Autres conseils

Essayez de le mettre dans le Form_Shown() événement.Parce qu'il se trouve dans un conteneur, l'insertion du constructeur Form_Load ou même du constructeur Form() ne fonctionnera pas.

Essayez d'utiliser textbox1.Select() au lieu de textbox1.Focus().Cela m'a aidé plusieurs fois.

Il vous suffit d'ajouter le Control.Select() de votre contrôle à ce code.J'ai utilisé cela pour mettre l'accent sur les contrôles lors de la validation lorsqu'il y a des erreurs.

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);
            }
        }
    }

J'avais un contrôle utilisateur dans un autre contrôle utilisateur.textbox1.Select() a fonctionné pour moi mais textbox1.Focus() n'a pas fonctionné.

Vous pouvez également essayer de définir Tabstop sur false, textbox1.Focus(), TabStop true.

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

        }

J'utilise ce code, il fonctionne bien sur le contrôle Win Tab ou le contrôle Dotnetbar Supertab

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top