Meilleur auteur de réponses
Fonctionnement étrange lors de la suppression d'un groupe de contrôles dans un FlowLayoutPanel

Question
-
J'ai un groupe de contrôles (UserControls) dans un LayOutPanel.
Je veux éliminer tous les contrôles appelés "lames" (pour les remplacer par d'autres). Voici mon code (10 contrôles sont dans le FlowLayoutpanel) :
Private Sub EffacerLaConfigurationToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EffacerLaConfigurationToolStripMenuItem.Click Dim Us As UserControl1 For Each Us In FlowLayoutPanel1.Controls FlowLayoutPanel1.Controls.Remove(Us) Us = Nothing NombreDeLames = NombreDeLames - 1 Next Us
Lorsque je clique sur l'élément correspondant du menu, seule une partie des contrôles disparaissent. Il faut que je clique 4 fois pour les faire disparaître tous.
Un élément de menu de contrôle m'indique bien que 5 contrôles restent après le premier clic, 2 après le second, 1 après le troisième et 0 après le quatrième.
Je ne comprends pas du tout ce qu'il se passe...
Quelqu'un peut-il me l'expliquer et m'aider à corriger le code ?
Pierre Allemand
Réponses
-
Bonjour,
Vous supprimer un élément d'une collection que vous parcourez. L'algo de base pour ce genre d'opération est de parcourir la collection en partant de la fin :
Ci-joint la version corrigée :
For i As Integer = FlowLayoutPanel1.Controls.Count - 1 To 0 Step -1 FlowLayoutPanel1.Controls.RemoveAt(i) NombreDeLames = NombreDeLames - 1 Next
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0- Marqué comme réponse Pierre Allemand lundi 30 avril 2012 07:27
Toutes les réponses
-
Bonjour,
Vous supprimer un élément d'une collection que vous parcourez. L'algo de base pour ce genre d'opération est de parcourir la collection en partant de la fin :
Ci-joint la version corrigée :
For i As Integer = FlowLayoutPanel1.Controls.Count - 1 To 0 Step -1 FlowLayoutPanel1.Controls.RemoveAt(i) NombreDeLames = NombreDeLames - 1 Next
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0- Marqué comme réponse Pierre Allemand lundi 30 avril 2012 07:27
-