Laden...

[gelöst] GroupBox sauber aus Form löschen

Erstellt von Camouflagezebra vor 12 Jahren Letzter Beitrag vor 12 Jahren 2.050 Views
Thema geschlossen
C
Camouflagezebra Themenstarter:in
10 Beiträge seit 2010
vor 12 Jahren
[gelöst] GroupBox sauber aus Form löschen

Hallo Community,

ich hab zZ ein scheinbar leicht zu lösendes Problem, dass ich aber einfach nicht zu bewältigen schaffe:

Ich möchte alle GroupBoxes aus einem Fenster löschen:


            foreach (Control c in Controls)
            {
                if (object.ReferenceEquals(c.GetType(), typeof(GroupBox)))
                {
                    c.Hide();
                    c.Dispose();
                }
            }

Diese Vorgehensweise funktioniert leider nur so halb.
Sie wird ausgeführt, wenn ich auf einen Button klicke, jedoch muss ich 4-5 auf den Button klicken, bis wirklich alle Textboxen verschwinden 😕

Wie kann ich das Problem komplett löschen?

greetz
Zebra

Hinweis von herbivore vor 12 Jahren

Typabfragen besser per is statt per == durchführen.

L
416 Beiträge seit 2008
vor 12 Jahren

Das liegt daran das du durchs Dispose die Liste veränderst und dadurch einige Controls übersprungen werden.
So funktionierts:


for (int i = 0; i < Controls.Count; i++)
{
    if (Controls[i].GetType() == typeof(GroupBox))
    {
        Controls.RemoveAt(i);
        i--;
    }
}

Allerdings wäre es besser die Groupboxen in einer extra Liste zu halten und sie dann zu entfernen.

Hinweis von herbivore vor 12 Jahren

Typabfragen besser per is statt per == durchführen.

W
195 Beiträge seit 2008
vor 12 Jahren

So sollte es auch gehen:


IEnumerable<GroupBox> boxes = Controls.OfType<GroupBox>();
foreach (GroupBox box in boxes)
{
        Controls.Remove(box);
}

Gruß,

wcseller

C
Camouflagezebra Themenstarter:in
10 Beiträge seit 2010
vor 12 Jahren

Vielen Dank für eure Hilfe.

Ich habe beide Lösungsvorschläge getestet:

         - Die Lösung von Lennart funktioniert einwandfrei.  
         - Die Lösung von wcseller hat das gleiche Problem wie meine Eigene.   

greetz
Zebra

W
195 Beiträge seit 2008
vor 12 Jahren
  • Die Lösung von wcseller hat das gleiche Problem wie meine Eigene.

Du hast Recht, man muss mit dem löschen natürlich von hinten beginnen:


IEnumerable<GroupBox> boxes = Controls.OfType<GroupBox>().Reverse<GroupBox>();
foreach (GroupBox box in boxes)
{
   Controls.Remove(box);
}

Gruß,

wcseller

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo wcseller,

mit der Richtung hat das nichts zu tun, sondern nur damit, ob über die ursprüngliche Auflistung iteriert wird, die sich durch das Löschen verändert wird, was eben nicht erlaubt ist, oder eine Kopie davon, die du implizit erstellst, wenn du Reverse verwendest.

Hallo zusammen,

das Thema, wie man nun am besten bestimmte Elemente aus einer Liste löscht, ist allerdings [FAQ] Auflistungs-Elemente suchen und entfernen ausführlich, um nicht zu sagen erschöpfend beschrieben. Das müssen wir nicht nochmal aufrollen.

herbivore

Thema geschlossen