Domanda

Diciamo che ho un Textbox nidificato all'interno di a TabControl.

Quando il modulo viene caricato, vorrei concentrarmi su quello Textbox (per impostazione predefinita il focus è impostato su TabControl).

Semplicemente chiamando textbox1.focus() nel Load l'evento del modulo non sembra funzionare.

Sono stato in grado di focalizzarlo facendo quanto segue:

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

La mia domanda è:

Esiste un modo più elegante per farlo?

È stato utile?

Soluzione

La seguente è la soluzione:

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

La domanda migliore sarebbe tuttavia: perché...Non sono del tutto sicuro di quale sia la risposta a questa domanda.

Modificare:Sospetto che abbia qualcosa a che fare con il fatto che sia il modulo che il TabControl sono contenitori, ma non ne sono sicuro.

Altri suggerimenti

Prova a inserirlo nel Form_Shown() evento.Poiché è in un contenitore, l'inserimento del costruttore Form_Load o anche del costruttore Form() non funzionerà.

Prova ad usare textbox1.Select() invece di textbox1.Focus().Questo mi ha aiutato alcune volte.

Devi solo aggiungere Control.Select() per il tuo controllo a questo codice.L'ho usato per focalizzare l'attenzione sui controlli durante la convalida quando si verificano errori.

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

Avevo un controllo utente all'interno di un altro controllo utente.textbox1.Select() ha funzionato per me ma textbox1.Focus() non ha funzionato.

Puoi anche provare a impostare TabStop su false, textbox1.Focus(), TabStop true.

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

        }

Io uso questo codice e funziona bene sul controllo della scheda win o sul controllo supertab dotnetbar

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top