como colocar o foco no TextBox quando o formulário é carregado?

156

Eu tenho no meu programa C # textBox

Preciso que, quando o programa for iniciado, o foco esteja na caixa de texto

Eu tento isso no Form_Load:

MyTextBox.Focus();

mas não vai funcionar

Gali
fonte

Respostas:

341

Defina a ActiveControlpropriedade do formulário e você deve ficar bem.

this.ActiveControl = yourtextboxname;
V4Vendetta
fonte
1
Eu tentei isso por ComboBox. Mas também não funciona!
21815 Alex Jolig
1
Graças isso funcionou para mim, onde tudo o resto não funcionou. Não sei por que o Índice da guia = 0 não funcionará, mas provavelmente há uma ordem estranha de operações em andamento ao carregar o diálogo de formulário / exibição.
David Carrigan 16/09
1
TENTE ISSO >>> this.ActiveControl = yourtextboxname.Control;
Polamin Singhasuwich
3
Isso funciona muito bem, mas por que não MyTextBox.Focus();funcionou - isso parece funcionar bem quando o programa está sendo executado.
Levon
2
Escrever this.ActiveControl = textBox1;Todo mundo entende o significado de "textBox1". "youttextboxname" soa como... = "MyTextBox";
Bitterblue
25

verifique sua ordem de tabulação e verifique se a caixa de texto está definida como zero

Spacemancraig
fonte
Trabalhando. Ou apenas tabindex para ser o primeiro elemento "focalizável" do cursor no formulário.
Apincik 22/05/19
15

Você poderia tentar:

MyTextBox.Select ();

De acordo com a documentação:

O método Select ativa o controle se o bit de estilo Selecionável do controle estiver definido como true no ControlStyles, estiver contido em outro controle e todos os seus controles pai estiverem visíveis e ativados.

Você pode primeiro verificar se o controle pode ser selecionável, inspecionando a propriedade MyTextBox.CanSelect .

Neil Knight
fonte
15

Você não pode definir o foco para um controle se ele não tiver sido processado. Form.Load () ocorre antes dos controles serem renderizados.

Vá para os eventos do formulário e clique duas vezes no evento "Mostrado". No manipulador de eventos mostrado no formulário, chame o método control.Focus ().

    private void myForm_Shown(object sender, EventArgs e)
    {
        // Call textbox's focus method
        txtMyTextbox.Focus();
    }
DavidG
fonte
12

Se você deseja definir o foco apenas na primeira vez em que o formulário é exibido, tente manipular o evento Form.Shown e fazê-lo lá. Caso contrário, use Control.VisibleChanged .

Andy Johnson
fonte
6

Textbox.Focus()"Tenta" para definir o foco no elemento da caixa de texto. No caso do elemento, a visibilidade está oculta, por exemplo, Focus()não funcionará. Portanto, verifique se seu elemento está visível antes de chamar Focus().

GRC
fonte
5

O motivo pelo qual você não pode fazê-lo funcionar é porque o Loadevento é chamado antes que o formulário seja desenhado ou renderizado.

É como dizer a uma pizzaria como fazer sua pizza e pedir que eles enviem uma foto de quanto pepperoni há na sua pizza antes de fazerem.

using System;
using System.Windows.Forms;

namespace Testing
{
    public partial class TestForm : Form
    {
        public TestForm()
        {
            InitializeComponent();

            Load += TestForm_Load;

            VisibleChanged += TestForm_VisibleChanged;

            Shown += TestForm_Shown;

            Show();

        }

        private void TestForm_Load(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called before the form is rendered.");
        }

        private void TestForm_VisibleChanged(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called before the form is rendered.");
        }

        private void TestForm_Shown(object sender, EventArgs e)
        {
            MessageBox.Show("This event is called after the form is rendered.");
            txtFirstName.Focus();
        }
    }
}
Ben
fonte
4

Resolvi meu problema com a alteração da propriedade "TabIndex" do TextBox. Defino 0 para o TextBox que quero focar no Form quando o programa é iniciado.

Mehmet Taha Meral
fonte
3

use o formulário mostrado evento e defina

MyTextBox.Focus();
Nitin ...
fonte
3

Defina o valor da propriedade Index da guia = 0 e, em seguida, escreva na função de carregamento de formulário:

YourTextboxName.Focus();

Vai funcionar.

Shakaib Akhtar
fonte
2

Você pode usar textBox1.select();o TabIndex ou na configuração da caixa de texto. TabIndex=0focado primeiro.

user9248597
fonte
Se chamarmos textBox1.select (); no manipulador de eventos de carregamento de formulário, ele define o foco no textBox1.
precisa
1

Defina Tabstop como True e TabIndex para o mínimo no controle no qual você precisa se concentrar.

Por exemplo, se você tiver 2 TextBoxes: TextBox1 e TextBox2, defina Tabstop como True para ambos e TabIndex como 0 e 1 respectivamente. Quando o formulário for carregado, o foco estará no TextBox1 e, ao pressionar a tecla 'Tab', o foco será movido para o TextBox2.

Aparna Ratheesh
fonte
1

no seu formulário, vá para propriedades e verifique se a propriedade "TopMost" está definida como verdadeira, para resolver o seu problema.

Mustafa
fonte
0

funcionou para mim defina tabindex como 0 this.yourtextbox.TabIndex = 0;

Muhafil Saiyed
fonte
0

Finalmente, encontrei o problema que estava usando o metro framework e todas as suas soluções não funcionarão com o metroTextBox, e todas as suas soluções funcionarão com o textBox normal em load, show, visible_change, events, até mesmo o tab tab = 0 é válido.

   // private void Form1_VisibleChanged(object sender, EventArgs e)
   // private void Form1__Shown(object sender, EventArgs e)
    private void Form1_Load(object sender, EventArgs e)
    {

        textBox1.Select();
        this.ActiveControl=textBox1;
        textBox1.Focus();
    }
MarkLee
fonte
-5

Em jquery definir foco

$(function() {
  $("#txtBox1").focus();
});

ou em Javascript você pode fazer

window.onload = function() {
  document.getElementById("txtBox1").focus();
};
Sudip Bhattacharya
fonte
4
Essa pode ser uma boa resposta para uma pergunta do site, mas esta está marcada c#e winforms.
Ben Voigt