Collection: Position element courant

Est-ce normal que la position de l’element courant retourne la valeur 1 si c’est le premier element de la collection représentée dans une listbox collection qui est sélectionné ?

Pour rappel: le premier element d’une collection est l’element 0 :-?

Oui

Cordialement,

Ok, mais quels sont les elements qui ont fait que vous avez fait ce choix ?

On aurait pu penser que l’on utilise cet element pour se positionner dans la collection directement :expressionless:

exemple:
<code 4D>
Si (Form.ChoixAccesCurrentPos>=0)
$Item.NumAcces:=Form.ChoixAcces[Form.ChoixAccesCurrentPos].NumTypeAcces
fin de si

</code 4D>

on est obligé du coup de faire:
<code 4D>
Si (Form.ChoixAccesCurrentPos>0)
$Item.NumAcces:=Form.ChoixAcces[Form.ChoixAccesCurrentPos-1].NumTypeAcces
fin de si

</code 4D>

: DOC

si aucun élément/entité n’est sélectionné(e), l’expression/la
variable reçoit la valeur 0

Si j’ai bien compris votre besoin, ne pouvez vous pas définir Form.selected dans la propriété “Eléments sélectionnés” de votre Listbox la valeur de l’élément courant sera alors géré automatiquement.

Votre code deviendrait :

<code 4D>
$Item.NumAcces:=Form.selected.NumTypeAcces
</code 4D>

Pardon :pray:, mon exemple était un peu (beaucoup :mrgreen:) trop vague…

Non, en fait, c’est Form.ChoixAccesCurrentPos qui est définit comme variable pour la propriété “Position element courant” de ma listbox collection.

Mais, je m’attendais à ce que la position retournée s’adapte au fonctionnement d’une collection et non d’un tableau. C’est à dire que si je sélectionné le premier element la position de l’element dans la collection c’est 0 et non 1.

Dans mon code, je pensais pouvoir utiliser directement cette position :

MaCollection[Position element courant]

or, il faut faire: MaCollection[Position element courant-1] :frowning:

D’ailleurs, on attend toujours la feature request qui retourne la collection d’index des elements sélectionnés pour pouvoir gérer enfin correctement les suppressions dans une listbox collection !
Et dans ce cas la collection resultante serait “[0]” et non pas “[1]”.

(apologies if I have misunderstood the gist of the discussion)

I think the current position (1-based) is mainly used for UI control, in other words the listbox.

for the data source, or collection, I suppose we should use collection.indexOf(This) instead.

(for code legibility and easier debugging, This should be passed as an argument to the meta expression)

Bonjour,

: Manuel PIQUET

Ok, mais quels sont les elements qui ont fait que vous avez fait ce
choix ?

La compatibilité avec les commandes Listbox.
Regarder par exemple la commande LISTBOX SELECTIONNER LIGNE et se qu’il se passe si l’on utilise l’indice 0 :
<<Si positionLigne vaut 0 et si le paramètre action contient lk remplacer sélection ou est omis, toutes les lignes de la listbox sont sélectionnées. Si le paramètre action contient lk supprimer de sélection, toutes les lignes de la listbox sont désélectionnées.>>

Cordialement,

Merci Olivier, j’en prend note. Même si un jour on obtient la feature de collection d’index qui elle sera bien avec des index réels de la collection je l’espère :pray:

Thanks Keisuke, but https://forums.4d.com/Post/FR/26046124/0/0/this part was already discussed before>.
We can’t use collection.indexOf(This) this is really NOT the same for delete element in a collection
We need a collection of index of selected items in the listbox propriety. So we can really delete the right element the user select and not the first same one find in the collection.

I think I understand your concern about deleting the correct element,
but I do not understand why one would put the same (not, identical, same) object in a listbox collection.

for example,

$a:=New object(“miyako”;“keisuke”)
$b:=New object(“miyako”;“keisuke”)
$c:=New object(“miyako”;“keisuke”)

$i:=New collection($a;$b;$c).indexOf($c) //$i is 2

indexOf() is not a find command, it is not comparing the content of the object.

it returns the object that matches the reference.

so unless you have collection like New collection($a;$a;$b;$b;$c;$c) I don’t see it being a problem.

This is true for collection based on object element, but what if I
have this type of collection [0;1;1;2;4;2;5;6] or [“A”;“B”;“C”;
“A”;“B”;“C”;“A”;“B”;“C”] or
[“rouge”,“vert”,“bleu”,“bleu”,“vert”,“rouge”]

If the user want delete the second “B” for example this is not the
same !

[“A”;“B”;“C”;“A”;“C”;“A”;“B”;“C”] # [“A”;“C”; “A”;“B”;“C”;“A”;“B”;“C”]

Here is what the 4D doc said (sorry in french here)

: 4D doc

La méthode collection.indexOf( ) recherche l’expression àChercher
parmi les éléments de la collection et retourne le numéro d’élément
de la première occurrence trouvée, ou -1 si aucune occurrence n’a
été trouvée.