ListBox : liste hors limite [Résolu]

Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
30 juillet 2007
- - Dernière réponse : hesnogood
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
30 juillet 2007
- 4 août 2005 à 21:37
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
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
90
Date d'inscription
samedi 29 décembre 2012
Dernière intervention
25 novembre 2018
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de Gildeplomb
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
25
3
Merci
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.

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 117 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
1
0
Merci
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
Commenter la réponse de florenth
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
30 juillet 2007
0
Merci
En fait, je sélectionne des lignes et les supprime en même temps.
Je pense que la recordcount est inférieur..
Commenter la réponse de hesnogood
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
30 juillet 2007
0
Merci
Merci de m'avoir oté cette épine du pied..
Commenter la réponse de hesnogood

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.