hesnogood
Messages postés10Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention30 juillet 2007
-
4 août 2005 à 11:58
hesnogood
Messages postés10Date d'inscriptionlundi 10 janvier 2005StatutMembreDernière intervention30 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
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 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.