Présélectionner des lignes d'une listbox

Mon but est dans le titre ; au chargement d’un formulaire, je voudrais
présélectionner des lignes.
la doc dit :

List box type collection ou entity selection
Il y a trois propriétés pour les list box basées sur des collections
ou des entity selections :
Elément courant : …
Position élément courant : …
Eléments sélectionnés : …
Note : Ces propriétés sont en “lecture seule”. Elles sont
automatiquement mises à jour en fonction des actions effectuées par
l’utilisateur dans la list box. Vous ne pouvez pas éditer leur valeur
pour modifier le statut de la sélection de la list box.

Dans ce cas, comment peut-on présélectionner des lignes par programmation ?

Tu as essayé LISTBOX SELECTIONNER LIGNE ?

Merci Arnaud,
C’est si simple et ça répond au besoin en mettant à jour l’objet Eléments sélectionnés.

J’ai quand même un problème dans l’événement on load : l’objet Eléments sélectionnés n’est pas encore à jour ; il faut, semble-t-il, attendre l’affichage de la listbox.
Or j’ai besoin de l’objet à jour pour finir le traitement…

Bonjour Bernard

Tu peux, utiliser la commande CALL FORM avant celle de DIALOG afin de réaliser le traitement sur ton objet.
Une partie des actions réalisées dans le ON LOAD peuvent ainsi être déplacées dans la méthode appelée par le CALL FORM.
Je te mets un exemple :

<code 4D>
C_LONGINT(_WForm1)
C_OBJECT($myObj)
$myObj:=New object
$myObj.objectProperties:=New collection
_WForm1:=Open form window("_WForm1";Plain form window;Horizontally centered;Vertically centered)
CALL FORM(_WForm1;“projectMethodToExecute”)
DIALOG("_WForm1";$myObj;*)
</code 4D>

Patrick

En résumé :

  • j’ai une table 1 et une table n ; dans le formulaire page de la table 1, j’ai une listbox avec la sélection de la table n
  • je veux au cours du chargement sélectionner un, plusieurs ou tous les les enregistrements de la table n
  • puis concaténer les champs texte des enregistrements sélectionnés de la table n dans une zone texte du formulaire

La solution simple :

  • sélectionner les enregistrements de la listbox (LISTBOX SELECT ROW(*;“eventsList”;0;lk replace selection)
    )
  • utiliser l’objet ‘éléments sélectionnés’ pour boucler sur les enregistrements de la table n.

Pas de chance, l’objet ‘éléments sélectionnés’ n’est pas à jour au cours du processus de chargement.
Je pense donc plutôt à POST OUTSIDE CALL.
Qu’en pensez-vous ?

Ou alors je n’ai pas bien compris le CALL FORM qui peut peut-être faire la même chose…
Si je dois lancer le CALL FORM par POST OUTSIDE CALL pour être sûr que le chargement est fini, il ne me paraît pas utile.

Bonjour,

Au moment du chargement, en principe, vous n’avez pas besoin de “éléments sélectionnés”.

Au moment où vous faites LISTBOX SELECT ROW, vous savez quelles lignes vous voulez sélectionner.

Vous pouvez donc appliquer ce critère à une query sur table n. Vous aurez une entity selection telle que vous l’attendiez dans “éléments sélectionnés”.

Qu’en pensez-vous ?

Je fais une recherche ORDA sur les enregistrements de la table N lors du chargement, que j’affecte à la listbox.
Je devrais en effet pouvoir l’utiliser.
Mais ça aurait été plus simple avec “éléments sélectionnés” car, dès que le formulaire est à l’écran, je réutilise la même fonction sur sélection manuelle, donc avec “éléments sélectionnés”.

Bonjour Bernard,

désolé de ne répondre que tardivement, mais je suis en déplacement avec un accès internet difficile.
Le CALL FORM te permet d’appeler la méthode ‘projectMethodToExecute’ qui aurait pour fonction de faire ta sélection et de mettre à jour ton entity selection des éléments sélectionnés.
Avec CALL FORM, tu n’as pas besoin de faire un POST OUTSIDE CALL.
L’avantage de cela, c’est que cette méthode te permet aussi d’être appelée dans le cadre de ton formulaire affiché pour le mettre à jour.
Autre point, je ne peux que te recommander d’utiliser l’objet ‘Form.xxxx’ pour définir les différents paramètres de ton dialogue. C’est bien pour cela que j’ai défini un objet que je passe à la commande Dialog.

Patrick