ListBox : liste hors limite [Résolu]

hesnogood
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
30 juillet 2007
- 4 août 2005 à 11:58 - 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
Gildeplomb
Messages postés
88
Date d'inscription
samedi 29 décembre 2012
Dernière intervention
29 mars 2018
- 4 août 2005 à 14:26
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

Merci Gildeplomb 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de Gildeplomb
Meilleure réponse
cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 4 août 2005 à 15:00
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.

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 95 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
florenth
Messages postés
1105
Date d'inscription
dimanche 1 août 2004
Dernière intervention
17 août 2008
- 4 août 2005 à 14:21
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
hesnogood
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
30 juillet 2007
- 4 août 2005 à 14:48
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
hesnogood
Messages postés
10
Date d'inscription
lundi 10 janvier 2005
Dernière intervention
30 juillet 2007
- 4 août 2005 à 21:37
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.