Pergunta

Digamos que eu tenha um Textbox aninhado dentro de um TabControl.

Quando o formulário for carregado, gostaria de me concentrar nisso Textbox (por padrão, o foco é definido para o TabControl).

Simplesmente ligando textbox1.focus() no Load evento do formulário não parece funcionar.

Consegui focar fazendo o seguinte:

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

Minha pergunta é:

Existe uma maneira mais elegante de fazer isso?

Foi útil?

Solução

A seguir está a solução:

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

A melhor pergunta seria, no entanto, por que ...Não tenho muita certeza de qual é a resposta para essa pergunta.

Editar:Suspeito que tenha algo a ver com o fato de que tanto o formulário quanto o TabControl são contêineres, mas não tenho certeza.

Outras dicas

Experimente colocá-lo no Form_Shown() evento.Por estar em um contêiner, colocar o Form_Load ou mesmo o construtor Form() não funcionará.

Tente usar textbox1.Select() em vez de textbox1.Focus().Isso me ajudou algumas vezes.

Você só precisa adicionar Control.Select() para seu controle a este código.Usei isso para definir o foco nos controles durante a validação quando há erros.

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

Eu tinha um controle de usuário dentro de outro controle de usuário.textbox1.Select() funcionou para mim, mas textbox1.Focus() não funcionou.

Você também pode tentar definir Tabstop como false, textbox1.Focus(), TabStop true.

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

        }

eu uso este código, ele funciona bem no controle win tab ou no controle supertab dotnetbar

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top