Suppression controles

Résolu
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 - 5 janv. 2008 à 11:07
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 - 5 janv. 2008 à 16:57
bonjour, bonne année, santé, pognon, sexe, drogue tout se qui rend la vie belle quoi ...
juste une question pour comprendre.
j'ajoute des elements dans un panel (en fait j'ajoute des ele dans un panel, puis j'ajoute ce panel à mon panel principal: Explorer1.FlowLayoutPanel1), pas de souci
après je veux les supprimer souci :
javais fait :
Dim contro As Object
             For Each contro In Explorer1.FlowLayoutPanel1.Controls

                Explorer1.FlowLayoutPanel1.Controls.Remove(contro)

            Next contro

et ca ne les supprimait pas tous

en faisant
        Dim contro As Object
        Dim bool As Boolean
        bool = False
        While bool = False
            bool = True
            For Each contro In Explorer1.FlowLayoutPanel1.Controls
                Explorer1.FlowLayoutPanel1.Controls.Remove(contro)
                bool = False
            Next contro
        End While

ca marche, et je trouve ca taré ...
j'ai chécké que le for each boucle bien utniquement sur les panels, et non sur les sous obj de ces panels, ce qui aurait pu expliquer la sortie de for each
le fait est que ca marche, donc pas de souci, mais ca me turlupine (bonne résolution 2007, utiliser turlipiner à tire larigot)
merci ...

4 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 janv. 2008 à 13:35
Salut,

Je pense que c'est le même genre de problème que celui bien connu de suppression des éléments d'une liste dans une boucle for allant du premier au dernier : dans ta boucle, si tu supprime un élément, l'itérateur perd la position à laquelle il était.

Dans ton cas, au lieu de faire un for-each, il vaudrait mieux faire un While (Explorer1.FlowLayoutPanel1.Controls.Count > 0)
______________________________________
DarK Sidious
3
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
5 janv. 2008 à 16:17
marvelous !
merci, c très bon à savoir.

Des fois, vb, ca fait bien rigoler ...
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
5 janv. 2008 à 16:26
Salut,

Ce n'est pas un problème lié à VB, mais un problème d'algorithme :
Si tu as un tableau avec 100 éléments par exemple, et que tu le parcoure de l'élément 0 à l'élément 99 en supprimant chaque élément du tableau, arrivé à l'élément 50, tu aura bien supprimé les 50 premiers, mais tu ne pourras pas aller plus loin... la solution consiste à prendre le problème à l'envers : commencer par le 99ème élément pour remonter jusqu'au dernier. C'est le cas pour de très nombreux langages (tous ?).
______________________________________
DarK Sidious
0
cs_mabrouklepoux Messages postés 84 Date d'inscription lundi 6 novembre 2000 Statut Membre Dernière intervention 25 juillet 2008 1
5 janv. 2008 à 16:57
effectivement, je pensais candidement qu'un for each saurais débrouiller ce pb !
0
Rejoignez-nous