Przepinanie kontrolek do flowLayoutPanel

0

Mam problem z przepisaniem kontrolek pomiędzy flowLayoutPanel a kontrolką klasy Control. W programie potrzebuję przechowywać sporo kontrolek w jakimś obiekcie żeby później przepinać je do paneli, utworzyłem w tym celu kontrolkę fields klasy Control i do niej przypinam wszystkie kontrolki z którymi chce pracować. W trakcie działania programu przepinam niektóre kontrolki do flowLayoutPanel, przed czym te które już są w nim przenoszę ponownie do fields. Czyli taka wymiana, jak nowe wchodzą, to przed tym wyrzucam stare. No i tutaj pojawia się problem, żeby nie zaciemniać pokażę tylko kod usuwania kontrolek. W momencie uruchomienie tego kodu w flowLayoutPanel są 4 kontrolki, co potwierdza wyświetlenie flowLayoutPanel1.Controls.Count, jednak podczas pętli for, messagebox wyświetla się tylko 2 razy, dla i = 0 oraz 1. A co z 2 i 3? Dlaczego tamte kontrolki nie usuwają się? Nie wyświetla się żaden błąd.

MessageBox.Show("req: " + flowLayoutPanel1.Controls.Count); // req: 4
for (int i = 0; i < flowLayoutPanel1.Controls.Count; i++)
{
    MessageBox.Show(i.ToString()); // 2 razy wyświetlony
    flowLayoutPanel1.Controls[i].Parent = fields;
}
0

Bo jak wywalasz coś z kolekcji to kolekcja automatycznie staje się mniejsza więc za każdym obiegiem pętli flowLayoutPanel1.Controls.Count jest mniejsze o 1. ;)
I masz wtedy warunek 2 < 2 co nie jest prawdą i pętla się kończy. ;)

MessageBox.Show("req: " + flowLayoutPanel1.Controls.Count); // req: 4
while (flowLayoutPanel1.Controls.Count != 0)
{
   flowLayoutPanel1.Controls[0].Parent = fields;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1