martes, 27 de abril de 2010

User Control: FocusController

Cuando se carga una página GeneXus se encarga de colocar el foco en el primer campo editable que encuentra, pero que pasa si queremos poner el foco en determinado campo de la pantalla?

En muchos casos queremos que el foco vaya a un campo particular del form que no necesariamente es el primer campo de la pantalla. Es más, nos puede pasar que queramos que el usuario ingrese datos en un grid apenas se cargue la página,  para lo cual desearíamos poner el foco en el primer campo de la primera fila de un grid.

Para cumplir con ese deseo de controlar donde irá el foco luego de cargada la página, y en especial que vaya a un campo de un grid, surge la idea de desarrollar el user control, FocusController.

Como funciona?

Imaginen un ejemplo muy simple de un grid con un par de variables y el siguiente evento load para cargar los valores:

Event Grid1.Load
    for &I=1 to 5
        &Var1 = &i
        &Var2 = &i
        grid1.Load()
    endfor
EndEvent

Pero la idea es que al cargar el webpanel el foco vaya al campo asociado a &Var1 en la primera fila del grid, entonces lo que hacemos es colocar el user control FocusController en el form y cambiamos el evento load de la siguiente manera:

Event Grid1.Load
    for &I=1 to 5
        if &I=1
            FocusController1.OnLoadControlFocus = &Var1.InternalName
        endif
        &Var1 = &i
        &Var2 = &i
        grid1.Load()
    endfor
EndEvent

La propiedad OnLoadControlFocus del user control debe ser cargada con el InternalName (nombre interno que se le dará al campo en el html generado) de un campo que pueda recibir el foco, como por ejemplo: var/att editables, imagenes, o botones.

Nota: el user control fue desarrollado y testeado con la versión GeneXus Evolution 1, no se asegura su funcionamiento con versiones anteriores o posteriores de GeneXus.

No hay comentarios: