Hace unos días me escribió un lector del blog preguntándome como hacer esto. La cosa es que decía que cuando colocaba un control "normal" de ASP.NET en el formulario, bastaba con llamar a su método Focus() para que, al mostrarse la página en el navegador, dicho control tuviera el foco (por ejemplo un TextBox). El caso es que no tenía la misma funcionalidad en los controles de usuario que se construía para reutilizar la funcionalidad de la interfaz y le resultaría muy útil.

La solución es muy sencilla: un control de usuario no es más que una clase normal y corriente y como tal se puede extender con nuevos métodos y propiedades. Por ello basta con que creemos un método Focus() propio que delegue en el método Focus() del control interno que queremos que pille el foco cuando el control tenga el foco. Me explico... Imaginemos que en nuestro control de usuario ASCX tenemos varios controles: unas etiquetas, un par de cuadros de texto, una lista desplegable, etc... y queremos que cuando el control tenga el foco éste se sitúe en el control de nombre Texto1. Lo único que tenemos que hacer es definir el método Focus así:

Public void Focus()
{
   Texto1.Focus();
}

Es bien fácil. Ahora podremos poner el foco programáticamente en nuestro control del mismo modo que lo haríamos con otro de ASP o personalizado.

En un próximo post voy a explicar algo mucho más interesante que esto: cómo hacer que nuestro control de usuario ASCX sea capaz de ser validado por los controles de validación nativos que vienen con ASP.NET. Esto es muy interesante porque podremos usarlos del mismo modo que un control normal para meterles la validación de forma externa y no, como es típico, incluyendo los controles de validación dentro del propio ASCX que no es nada óptimo. A ver si saco tiempo y lo pongo pronto.

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA