SetFocus con WebListBox en proyectos Web

El método SetFocus, implementado en la clase WebControl de la cual derivan todas las clases de elementos de UI, es el encargado de poner o asignar el foco visual de entrada (por ejemplo, pulsación de teclas) en la instancia de control indicado; y si bien este funciona correctamente con controles como pueda ser WebTextField, no ocurre así cuando se aplica sobre el control gráfico WebListBox, un bug presente y verificado desde la release Xojo 2011. A continuación te presento una forma realmente sencilla que puedes utilizar para obtener esta funcionalidad.

El método alternativo en el que se basa esta solución se basa en la capacidad que tenemos de ejecutar código JavaScript sobre cualquier elemento mediante el uso del método ExecuteJavaScript cuando lo aplicamos sobre cualquier instancia de un proyecto Web. Para ello, hemos de obtener previamente el ID único correspondiente al control sobre el que deseamos aplicar el nuevo foco.

El modo de hacerlo es bien simple, declarando una variable de tipo String que recibirá el valor devuelto al aplicar el método ControlID sobre la instancia en cuestión.

Por ejemplo, supongamos que tenemos dos WebListBox en nuestro proyecto Web; el primero de ellos denominado WebListBox1 y que tiene el foco originalmente cuando ejecutamos la aplicación, y uno segundo WebListBox2 del que deseamos aplicar el foco cada vez que se cambie el elemento seleccionado sobre el primer WebListBox. Por tanto, la forma de obtener el ID correspondiente a WebListBox2 sería ejecutando la siguiente línea de código aplicada en el Evento SelectionChanged de WebListBox1:

Dim id As String = WebListBox2.ControlID

A continuación aplicaremos el método JavaScript Focus() sobre dicho control utilizando la siguiente línea, también en el evento SelectionChanged de WebListBox1:

me.ExecuteJavaScript("document.getElementById('"+id+"').focus();")

Con este par de líneas de código, ya estará listo y funcionando. A partir de ahora, cada vez que se cambie la selección en el primero de los WebListBox, el foco saltará automáticamente al segundo WebListBox, capturando desde ese momento los eventos correspondientes al teclado como por ejemplo moverse por entre los elementos del WebListBox utilizando las teclas de cursor.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *