ListBox : liste hors limite [Résolu]

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

5 réponses

Répondre au sujet
Gildeplomb 88 Messages postés samedi 29 décembre 2012Date d'inscription 29 mars 2018 Dernière intervention - 4 août 2005 à 14:26
+3
Utile
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
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Gildeplomb
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 4 août 2005 à 15:00
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Delphiprog
florenth 1105 Messages postés dimanche 1 août 2004Date d'inscription 17 août 2008 Dernière intervention - 4 août 2005 à 14:21
0
Utile
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 10 Messages postés lundi 10 janvier 2005Date d'inscription 30 juillet 2007 Dernière intervention - 4 août 2005 à 14:48
0
Utile
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 10 Messages postés lundi 10 janvier 2005Date d'inscription 30 juillet 2007 Dernière intervention - 4 août 2005 à 21:37
0
Utile
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.