List box en vb6 additem et removeitem

Signaler
Messages postés
12
Date d'inscription
jeudi 16 octobre 2003
Statut
Membre
Dernière intervention
26 décembre 2003
-
Messages postés
5
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
31 mars 2004
-
saul
Bonjour
Je dispose en vb6 de deux list box et d'un bouton command que je veux programmer pour qu'il me permette de transferer certains noms de la listbox 1 vers la listbox2 et de les supprimer de la listbox1 :
avec le code suivant
Private Sub cmdInactif_Click()
Dim i As Integer
For i = 0 To lstActif.ListCount - 1
If lstActif.Selected(i) Then
lstInactif.AddItem (lstActif.List(i))
End If
Next i
For i = 0 To lstActif.ListCount - 1
If lstActif.Selected(i) Then
lstActif.RemoveItem (lstActif.List(i))
End If
Next i
End Sub
cela ne marche pas alors que si je supprime la deuxième boucle il fait correctement le transfert de lisbox1 vers listbox2 en utilisant la première boucle
si je supprime la première boucle et que je laisse que la deuxième cela ne marche pas quand même alors qu'il me semble que j'utilise les mêmes règles pour programmer la boucle pour la propriété additem et pour la propriété removeitem
où est mon erreur
a l'avance merci ;c'est un peu long mais pour comprendre

3 réponses

Messages postés
15814
Date d'inscription
jeudi 8 août 2002
Statut
Modérateur
Dernière intervention
4 mars 2013
102
A mon avis, cela vient du fait que tu supprime les entrées de liste à partir du début : lorsque tu supprime une entrée de liste, les index des autres entrées qui suivent sont modifié, se qui n'est pas top !

Pour pallier à ce problème : fait ta boucle dans l'autre sens :

For i = lstActif.ListCount - 1 To 0 Step -1
If lstActif.Selected(i) Then
lstActif.RemoveItem (lstActif.List(i))
End If
Next i

Logiquement, ce code devrait marcher... à tester.

DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
Messages postés
106
Date d'inscription
vendredi 23 mai 2003
Statut
Membre
Dernière intervention
22 mai 2004

il manque les valeurs true dans tes deux if

If lstActif.Selected(i)=true Then

stacco
Messages postés
5
Date d'inscription
jeudi 19 juin 2003
Statut
Membre
Dernière intervention
31 mars 2004

ma réponse vient peut être un peu tard mais je viens d'être confronté au même probleme que Saul et la solution est simple, c'est tout simplement un problème de syntaxe :
le paramètre de la méthode removeItem est un index est non pas la valeur de l'item en question.

le code est donc le suivant :

lstActif.RemoveItem i

et non pas :

lstActif.RemoveItem (lstActif.List(i))