Fácil ¿no?. Pues bien la cosa se complico hasta que nos dimos cuenta del fallo. Y luego pense... anda pues esto es bastante común y seguramente a más de uno os ha pasado.
Para poner el foco en un campo de texto lo primero que piensas es: es fácil, cuando se carga el formulario cojo y le digo TexBox1.focus() y lo primero que se nos ocurre es escribir un código como el siguiente:
private void Form1_Load(object sender, EventArgs e)
{
CampoTexto.Focus();
}
Pones eso y te quedas tan oreado, pensando que esta bien. Ejecutas el programa y ves que no se pone el foco en el campo de texto. Vuelves a repasar el código y piensas: pero si esta bien... a ver ... cuando se carga el formulario se dispara el evento Load... pues vale pongo el foco con la funcion focus() ....
ERROR el evento Load del formulario, se dispara al cargar el fomuario pero cuando llegamos a poner el foco, aun no se ha creado ni enlazado el campo de texto al formulario y por tanto no esta preparado para recibir eventos, ese es el problema.
Para solucionar esto hay un evento del formulario, que se dispara antes de que el formulario se muestre en pantalla y despues del evento Load, que es el evento Shown.
Este evento en cuestion es el que debemos usar para preparar el formulario antes de su visualizacion y por tanto si queremos poner el foco en nuestro campo.
Asi lo único que tenemos que hacer a la hora de poner el foco es:
private void Form1_Shown(object sender, EventArgs e)
{
CampoTexto.Focus();
}
y asi se resolveria nuestro problema.
Como veis solución sencilla pero que si no nos damos cuenta del tema que os comentaba anteriormente del evento load, nos puede dar muchos quebraderos de cabeza y pasar tiempo inecesario buscando soluciones alternativas para este tipo de problemas.
Espero que haya servido de ayuda.
