¿Cómo poner foco en TextBox cuando se carga el formulario?

156

Tengo en mi programa C # textBox

Necesito que cuando comience el programa, el foco esté en el cuadro de texto

Intento esto en Form_Load:

MyTextBox.Focus();

pero no funcionará

Gali
fuente

Respuestas:

341

Establezca la ActiveControlpropiedad del formulario y debería estar bien.

this.ActiveControl = yourtextboxname;
V4Vendetta
fuente
1
Intenté esto por ComboBox. ¡Pero tampoco funciona!
Alex Jolig
1
Gracias, esto funcionó para mí donde todo lo demás no. No estoy seguro de por qué Tab Index = 0 no funcionará, pero probablemente haya un orden extraño de operaciones mientras se carga el formulario / cuadro de diálogo que se muestra.
David Carrigan
1
PRUEBE ESTO >>> this.ActiveControl = yourtextboxname.Control;
Polamin Singhasuwich
3
Esto funciona muy bien, pero ¿por qué no MyTextBox.Focus();funcionó? Parece que funciona bien una vez que el programa se está ejecutando.
Levon
2
Escribir this.ActiveControl = textBox1;Todos entiende el significado de "textBox1". "youttextboxname" suena como... = "MyTextBox";
Bitterblue
25

verifique su orden de tabulación y asegúrese de que el cuadro de texto esté configurado en cero

Spacemancraig
fuente
Trabajando. O simplemente tabindex para ser el primer elemento "enfocable" del cursor en el formulario.
apincik
15

Tu podrías intentar:

MyTextBox.Select ();

De acuerdo con la documentación:

El método Seleccionar activa el control si el bit de estilo Seleccionable del control se establece en verdadero en ControlStyles, está contenido en otro control y todos sus controles principales están visibles y habilitados.

Primero puede verificar si el control puede seleccionarse inspeccionando el propiedad MyTextBox.CanSelect .

Neil Knight
fuente
15

No puede establecer el foco en un control si no se ha procesado. Form.Load () ocurre antes de que se representen los controles.

Vaya a los eventos del formulario y haga doble clic en el evento "Mostrado". En el controlador de eventos que se muestra en el formulario, llame al método control.Focus ().

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

Si sólo desea ajustar el foco de la primera vez que se muestra la forma, tratar el manejo de la Form.Shown evento y hacerlo allí. De lo contrario, use Control.VisibleChanged .

Andy Johnson
fuente
6

Textbox.Focus()"Intenta" establecer el foco en el elemento del cuadro de texto. En caso de que la visibilidad del elemento esté oculta, por ejemplo, Focus()no funcionará. Así que asegúrese de que su elemento sea visible antes de llamar Focus().

GRC
fuente
5

La razón por la que no puede hacer que funcione es porque Loadse llama al evento antes de dibujar o representar el formulario.

Es como decirle a una pizzería cómo hacer tu pizza y luego pedirles que te envíen una imagen de cuánto pepperoni hay en tu pizza antes de que la preparen.

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
fuente
4

Resolví mi problema al cambiar la propiedad "TabIndex" de TextBox. Establecí 0 para TextBox en el que quiero enfocarlo en Form cuando comience el programa.

Mehmet Taha Meral
fuente
3

use el evento que se muestra en el formulario y establezca

MyTextBox.Focus();
Nitina ...
fuente
3

Establezca el valor de la propiedad de índice de tabulación = 0 y luego en la función de carga de formulario escriba:

YourTextboxName.Focus();

Funcionará.

Shakaib Akhtar
fuente
2

Puede usar TabIndextextBox1.select(); o TabIndex en la configuración del cuadro de texto. TabIndex=0enfocado primero.

usuario9248597
fuente
Si llamamos a textBox1.select (); en el controlador de eventos de carga de formulario, establece el foco en el cuadro de texto1.
Tushar R.
1

Establezca Tabstop en True y TabIndex al mínimo en el control en el que necesita centrarse.

por ejemplo, si tiene 2 TextBoxes: TextBox1 y TextBox2, configure Tabstop en True para ambos y TabIndex en 0 y 1 respectivamente. Cuando se carga el formulario, el foco estará en TextBox1 y al presionar la tecla 'Tab', el foco se moverá a TextBox2.

Aparna Ratheesh
fuente
1

en su formulario, vaya a propiedades y asegúrese de que la propiedad "TopMost" esté establecida en verdadero, eso resolverá su problema.

Mustafa
fuente
0

funcionó para mí establecer tabindex en 0 this.yourtextbox.TabIndex = 0;

Muhafil Saiyed
fuente
0

Finalmente encontré el problema que estaba usando Metro Framework y todas sus soluciones no funcionarán con metroTextBox, y todas sus soluciones funcionarán con textBox normal en carga, mostrar, visibilidad_cambiar, eventos, incluso la pestaña índice = 0 es válida.

   // 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
fuente
-5

En jquery establecer foco

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

o en Javascript puedes hacer

window.onload = function() {
  document.getElementById("txtBox1").focus();
};
Sudip Bhattacharya
fuente
44
Esta podría ser una buena respuesta para una pregunta del sitio web, pero esta está etiquetada c#y winforms.
Ben Voigt