En tant que développeur, vous avez l’habitude de gérer des événements dans des objets de formulaire. Le plus courant est l’événement de formulaire on clicked qui peut être utilisé dans la plupart des objets, y compris les boîtes de liste. Dans cet objet particulier, les clics peuvent être gérés soit au niveau de la boîte de liste elle-même, soit dans les méthodes des colonnes.
À partir de 4D v18 R6, l’événement de formulaire on clicked est déclenché, qu’une cellule soit en cours d’édition ou non, ce qui vous donne un contrôle accru et améliore l’interface.
Voici un exemple très simple :
Vous souhaitez afficher les valeurs possibles à l’aide d’un menu contextuel pour une cellule lorsqu’elle est en cours de modification. Toutefois, lorsque la ligne est simplement sélectionnée, vous souhaitez proposer un choix de couleurs pour cette ligne ou cette cellule particulière.
C’est très simple à faire !
Pendant l’événement on clicked, vérifiez simplement si la cellule est en cours d’édition ou non. Puis, en fonction du résultat, affichez un menu ou un autre !
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; "Blue")
SET MENU ITEM PARAMETER ($dynMenu; -1 ; "Blue")
APPEND MENU ITEM ($dynMenu; "Green")
SET MENU ITEM PARAMETER ($dynMenu ; -1 ; "Green")
$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
Trouvez plus de détails sur les événements de formulaire dans le centre de documentation!
Note de compatibilité
Si vous avez déjà du code qui s’exécute pendant l’événement on clicked, vous pouvez vouloir arrêter l’exécution de ce code lorsqu’un clic se produit dans une cellule éditée. Dans ce cas, il suffit de tester au préalable l’état de cette cellule avec la fonction is editing text.
Consultez la documentation pour plus de détails techniques et rejoignez-nous sur le forum 4D pour toute question !