Asignar foco a un cuadro de texto

En ocasiones puede resultarnos muy útil que nada más se cargue una página, el cursor esté sobre el cuadro de texto que nosotros queramos, incluso si nos interesa elegir ese cuadro de texto de forma dinámica.

Así pues, ASP.NET nos lo vuelve a poner muy fácil, pues no hay más que añadir este texto, por ejemplo en el evento Page_Load:

AsignarFoco.aspx.cs
    protected void Page_Load(object sender, EventArgs e)
    {
        this.SetFocus("TextBox1");
    }

En este caso, a SetFocus le pasamos la ID que le hemos dado al control, pero también se le puede pasar el control entero. Por ejemplo, y tal y como cuenta (el gran) Fredrik Normén en su artículo Set Focus to the UserName textbox of the Login control, podemos asignar el foco al cuadro de texto de "Nombre de usuario" del control Login:

AsignarFoco.aspx.cs
    TextBox userName = Login1.FindControl("UserName") as TextBox;
    if (userName != null)
       Page.SetFocus(userName);


Como veis, lo que se hace es recoger el control UserName que está dentro de Login con FindControl(IdDelControl) y se convierte a TextBox (debe convertirse porque FindControl devuelve un Control, padre de TextBox). Por tanto es fácil observar que el control se puede recoger de cualquier sitio, por ejemplo dentro de un DetailsView, dentro de un Formview o dentro de la propia Page.

Si rizamos un poco más el rizo, podemos tener algo cómo:

AsignarFoco2.aspx.cs
        int iFocus = Convert.ToInt32(Request.QueryString["iFocus"]);
        switch (iFocus)
        {
            case 1:
                this.SetFocus("TextBox2");
                break;
            case 2:
                TextBox tb_Nuevo = new TextBox();
                PlaceHolder1.Controls.Add(tb_Nuevo);
                this.SetFocus(tb_Nuevo);
                break;
            default:
                break;
                // Si no vale ni 1 ni 2, no ponemos el cursor en ningún sitio.
        }


1. Recogemos una variable de (por ejemplo el querystring). También podríamos cogerla de una BBDD, de una variable de sesión, una cookie...
2. Según su valor, hacemos una acción u otra.
3. Si iFocus vale 2, creamos un TextBox nuevo, la añadimos a un PlaceHolder (que en este caso debe estar en la página .aspx) y le colocamos el cursor sobre él.