Boîtes de liste : Gestion des clics dans les cellules éditées

Traduit automatiquement de Deepl

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 !

Roland Lannuzel
- Product Owner & 4D Expert - Après avoir étudié l'électronique, Roland s'est lancé dans l'informatique industrielle en tant que développeur et consultant, créant des solutions pour les clients avec une variété de bases de données et de technologies. À la fin des années 80, il est tombé amoureux de 4D et l'a utilisé pour écrire des applications commerciales, notamment des systèmes de comptabilité, de facturation et de messagerie électronique. Il a rejoint la société en 1997 et a contribué à la conception de spécifications, d'outils de test et de démonstrations, ainsi qu'à la formation et à la présentation de la communauté 4D lors de nombreuses conférences. Il continue à façonner activement l'avenir de 4D en définissant de nouvelles fonctionnalités et des outils de développement de bases de données.