Control.Focus(), Control.Select(), Form.Load, Form.Activated

Para los desarrolladores que utilizan el .NET Framework y vienen de Visual Basic 6.0 tienen la costumbre de poner el foco en un control mediante la función Focus() (ya que en Visual Basic era así). Aunque es una manera totalmente aceptable y funcional, no siempre funciona como es debido. Aunque en efecto pueda parecer que Control.Select() y Control.Focus() son funciones idénticas, realmente no lo son. Acudamos a la definición de la MSDN Library:

Como ya comentaba antes, la diferencia es casi mínima, pero no por ello son iguales. Aunque en la práctica nos van a funcionar ambas fórmulas, hay ciertos casos “especiales” como es marcar el foco al cargarse un formulario.

Cuando tenemos formularios compuestos de muchos controles contenedores (ToolStripContainer, Panel, …) tenemos la necesidad de especificar via código qué control tendrá el foco al mostrarte el formulario.

La gracia del asunto es que en internet se encuentran muchas soluciones y muchas de ellas “cutrecañeras” como las siguientes:

  • Poner un Timer en el formulario que se active en el Load y que hasta que no esté el foco (Control.Focus()) en el control no se desactive
  • Crear una variable Boolean de instancia con valor falso y en el evento Form.Activated ejecutar Control.Focus() si el valor es falso (y después ponerlo verdadero).

La verdad es que todas estas soluciones vienen por una cultura VB-sera. Si por el contrario, uno quiere conseguir un resultado limpio la manera en que tiene que hacerlo en en la siguiente:

En el evento Load del formulario, hay que llamar a la función Select() del control que deseamos que tenga el foco al cargar el formulario.


About me


My name is Rafa Vargas. I'm an undergraduate student of Computer Science at University of Seville, Spain. I am mainly interested in computer security, usability and the business of software.

Click here to read the full story.

Twitter subscription

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Join 1,022 other followers

Archives


Follow

Get every new post delivered to your Inbox.

Join 1,022 other followers