ListBox : liste hors limite

Résolu
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
30 juillet 2007
-
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
30 juillet 2007
-
Bonjour,

Ayant trop de lignes dans un listBox, à chaque manipulation j'ai le message d'erreur 'Indice de liste hors limites' apparait.
Comment supprimer ce message d'erreur.. ou comment faire pour que l'erreur
ne se produise pas ?
Je suis sur Delphi 6.
Merci de votre aide

5 réponses

Messages postés
102
Date d'inscription
samedi 29 décembre 2012
Statut
Membre
Dernière intervention
24 mars 2021

Bonjour

Les limite de Listbox vont de 0 a ListBox1.Items.Count-1

Faut verifier si la manip de depasse pas ces limites

Exemple pour une boucle

For i:= 0 to Listbox1.items.count-1 do

( et non pas i:= 1 to Listbox.items.count )

Bye
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Au fur et à mesure que tu supprimes des lignes, la propriété ItemIndex est réactualisée.
Ce qui fait que si tu parcours ta ligne du premier au dernier élément, quand tu supprimes l'élément d'indice 0, l'élément qui avait l'indice 1 devient l'élément d'indice 0 et ainsi de suite.
Quand ensuite tu supprimes l'élément d'indice 1, en réalité tu supprimes l'élément qui avait l'indice 2 au départ, etc, etc.
Donc, en résumé, quand on supprime les éléments d'une liste, il y 2 (bonnes) manières de procéder :
1/- supprimer l'élément d'indice 0 autant de fois qu'il y a d'éléments dans la liste :
for i := 1 to Liste.Items.Count do
Liste.Items.Delete(0);

2/- supprimer les éléments en partant de la fin de la liste :
for i := Liste.Items.Count - 1 downto 0 do
Liste.Items.Delete(i);

L'erreur vient du fait que beaucoup croient que la valeur de la propriété Count est réactualisée à chaque tour de boucle. En réalité il n'en est rien.
Donc, si tu essaies de détruire le 5e élément alors qu'il n'en reste plus que 4, tu déclenches cette magnifique exception.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
1023
Date d'inscription
dimanche 1 août 2004
Statut
Membre
Dernière intervention
17 août 2008
2
Qu'entends-tu par "trop de lignes" ?

A mon avis, c'est sûrement dû à un problème dans la procedure qui le manipule.

Du type:

for i : = 0 to ListBox1.Items.Count do // Ici il manque un -1 après Count



{ Ou alors, lors d'une utilisation de ItemIndex lorsqu'il fait -1. Comme :}

ShowMessage(Listbox.Items.Strings[Listbox.ItemIndex]); // Erreur si ItemIndex < 0.


Ou tout simplement une confusion entre le Listbox1 et le Listbox2. Penses donc à renommer tes composants explicitement

Postes un bout de code, cela pourra nous aider.



@ ++

Florent


Si tu ne te plantes pas ......
tu ne poussera jamais
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
30 juillet 2007

En fait, je sélectionne des lignes et les supprime en même temps.
Je pense que la recordcount est inférieur..
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Statut
Membre
Dernière intervention
30 juillet 2007

Merci de m'avoir oté cette épine du pied..