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
Typabfragen besser per is
statt per == durchführen.
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.
Typabfragen besser per is
statt per == durchführen.
So sollte es auch gehen:
IEnumerable<GroupBox> boxes = Controls.OfType<GroupBox>();
foreach (GroupBox box in boxes)
{
Controls.Remove(box);
}
Gruß,
wcseller
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
- 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
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