ListBox : liste hors limite

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

5 réponses

Gildeplomb Messages postés 101 Date d'inscription samedi 29 décembre 2012 Statut Membre Dernière intervention 1 novembre 2023
4 août 2005 à 14:26
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
3
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
4 août 2005 à 15:00
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.
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
4 août 2005 à 14:21
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
0
hesnogood Messages postés 10 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 30 juillet 2007
4 août 2005 à 14:48
En fait, je sélectionne des lignes et les supprime en même temps.
Je pense que la recordcount est inférieur..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hesnogood Messages postés 10 Date d'inscription lundi 10 janvier 2005 Statut Membre Dernière intervention 30 juillet 2007
4 août 2005 à 21:37
Merci de m'avoir oté cette épine du pied..
0
Rejoignez-nous