Probleme boucle sur items listbox

[Résolu]
Signaler
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013
-
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013
-
Bonjour,
Je voudrai supprimer des éléments d'une listbox qui contiennent un certain mot.

Celui-ci marche mais il ne supprime qu'un seul de ces éléments.

Pour information, ce code permet d'ignore tous les items contenant le mot "(Execute)"

Voici mon code :

            Dim x As Integer
            For x = 0 To ListBoxGames.Items.Count - 1
                If InStr(ListBoxGames.Items(x), "(Execute)") > 0 Then
                    ListBoxGames.Items.RemoveAt(x)
                    Exit For
                End If
            Next


Une idée ? Merci

6 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,

Quant on modifie le nombre d'items (que ce soit par suppression ou par rajout), il faut toujours y aller du dernier vers le premier (de bas en haut, donc), sinon : croche-pieds assurés.

D'autre part, ton exit for à la première occurrence, fait que, de toutes manières, tu ne risques pas de passer/supprimer au delà de cette 1ère occurrence !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
et en plus (rappel) :
cet
Exit For

interrompt l'exécution de la boucle à la première occurrence. Comment s'étonner ensuite de ce que les autres occurrences ne sont pas recherchées ?


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
et si tu essayais :
For x = ListBoxGames.Items.Count - 1 To 0 step -1


??


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
76
Oui, comme le dis ucfoutu, si tu supprimes le 2ème item, le 3ème devient second, logique, mais le prochain item item de la boucle sera le 3ème, qui est en réalité l'ancien 4ème : tu n'auras pas testé cet item.
De plus, les bornes de début et de fin d'un For-Next ne sont estimés qu'une fois au premier passage, tu risques :
- de sauter des items, puisque le 3ème devenu 2ème ne sera pas testé
- d'arriver en fin de boucle en voulant pointer sur un item qui n'existe plus.

-->
-1- Plutôt utiliser un Do-Loop qu'un For-Next
-2- Commencer par la fin pour éviter les sauts d'items

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Oui je viens de me rendre compte que ce Exit For était un peu mal placé. J'ai fait ceci pour l'instant, mais le problème viens du fait que j'ai un peu de mal a manipulé le To... c'est un peu bête je sais.

        If CheckBoxIgnoreSteamGames.CheckState = CheckState.Checked Then
            Dim x As Integer
            For x = ListBoxGames.Items.Count - 1 To 0
                MsgBox(x)
                If InStr(ListBoxGames.Items(x), "(Steam)") > 0 Then
                    ListBoxGames.Items.RemoveAt(x)
                End If
                If x = 0 Then
                End If
            Next
        End If
Messages postés
86
Date d'inscription
jeudi 7 janvier 2010
Statut
Membre
Dernière intervention
13 juillet 2013

Ah oui ca marche tout de suite mieux. Merci beaucoup pour votre aide.