Cuadros de lista: Gestionar los clics en las celdas editadas

Traducido automáticamente de Deepl

Como desarrollador, estás acostumbrado a manejar eventos dentro de objetos de formulario. El más común es el evento de formulario on clicked que puede ser utilizado en la mayoría de los objetos, incluyendo los cuadros de lista. En este objeto en particular, los clics pueden ser manejados tanto a nivel de la caja de lista como dentro de los métodos de las columnas.

Y a partir de 4D v18 R6, el evento de forma on clicked se dispara tanto si se está editando una celda como si no, lo que le da un mayor control y mejora la interfaz.

He aquí un ejemplo muy sencillo:

Quiere mostrar los posibles valores mediante un menú contextual para una celda cuando se está editando. Sin embargo, cuando la fila está simplemente seleccionada, quiere ofrecer una opción de color para esa fila o celda en particular.

¡Es muy sencillo hacer esto!

Durante el evento on clicked, simplemente comprueba si la celda está siendo editada o no. Luego, dependiendo del resultado, ¡muestra un menú u otro!

If$choice
// use the .row info present in the Form event object
FORM Event(Contextual click) // you don't want to do anything if the click is not a contextual click
If (Is editing text) // if the text is being edited, suggest input values
$dynMenu :=Create menu
APPEND MENU ITEM ($dynMenu; "Alpha")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Alpha")
APPEND MENU ITEM ($dynMenu; "Bravo")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Bravo")
APPEND MENU ITEM ($dynMenu; "Charlie")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Charlie")
$choice :=Dynamic pop up menu($dynMenu)
If ( xml-ph-0033@row}:=$choice
End if
Else // if the text is NOT being edited, suggest color for the text
$dynMenu :=Create menu
APPEND MENU ITEM ($dynMenu; "Azul")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Azul")
APPEND MENU ITEM ($dynMenu; "Verde")
SET MENU ITEM PARAMETER ($dynMenu; -1; "Verde")
$choice :=Dynamic pop up menu($dynMenu)
If ($choice#")
// use columnName and row attributes of the Form event object

LISTBOX SET ROW COLOR (*; FORM Event.columnName; FORM Event.row; $choice)
End if
End if
RELEASE MENU
($dynMenu)
End if

Encuentre más detalles sobre los eventos de formulario en el centro de documentación.

Nota de compatibilidad

Si ya tiene código que se ejecuta durante el evento on clicked, puede querer detener la ejecución de ese código cuando se produce un clic dentro de una celda editada. En este caso, simplemente pruebe el estado de esta celda con la función is editing text por adelantado.

Revise la documentación para más detalles técnicos y únase a nosotros en el foro de 4D para cualquier pregunta.

Roland Lannuzel
- Propietario de Producto y Experto en 4D - Después de estudiar electrónica, Roland se dedicó a la informática industrial como desarrollador y consultor, construyendo soluciones para clientes con una variedad de bases de datos y tecnologías. A finales de los años 80 se enamoró de 4D y lo ha utilizado para escribir aplicaciones de negocio que incluyen sistemas de contabilidad, facturación y correo electrónico.Eventualmente se unió a la compañía en 1997, las valiosas contribuciones de Roland incluyen el diseño de especificaciones, herramientas de prueba, demos, así como la formación y hablar con la comunidad 4D en muchas conferencias. Continúa dando forma activamente al futuro de 4D definiendo nuevas características y herramientas de desarrollo de bases de datos.