Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] GroupBox sauber aus Form löschen
Camouflagezebra
myCSharp.de - Member



Dabei seit:
Beiträge: 10
Herkunft: Österreich

Themenstarter:

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

beantworten | zitieren | melden

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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Camouflagezebra am .

Moderationshinweis von herbivore (22.07.2011 - 11:18)

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

private Nachricht | Beiträge des Benutzers
Lennart
myCSharp.de - Member



Dabei seit:
Beiträge: 416
Herkunft: Bawü

beantworten | zitieren | melden

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.

Moderationshinweis von herbivore (22.07.2011 - 11:18)

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

private Nachricht | Beiträge des Benutzers
wcseller
myCSharp.de - Member



Dabei seit:
Beiträge: 188

beantworten | zitieren | melden

So sollte es auch gehen:


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

Gruß,

wcseller
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von wcseller am .
private Nachricht | Beiträge des Benutzers
Camouflagezebra
myCSharp.de - Member



Dabei seit:
Beiträge: 10
Herkunft: Österreich

Themenstarter:

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
wcseller
myCSharp.de - Member



Dabei seit:
Beiträge: 188

beantworten | zitieren | melden

Zitat von Camouflagezebra
- 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
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von wcseller am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers