Fakiz - Mo 19.03.12 22:47
Titel: Foreach - Schleife ist Fehlerhaft
Guten Abend,
ich habe momentan folgendes Problem, ich versuche alle Checkboxen auf meiner Form durchlaufen zu laßen und ggf. die Checkbox unchecken. So wie es aussieht werden allerdings alle Controls auf der Form durchlaufen. Ich hoffe jemand kann mir auf die Sprünge helfen wo ich den Fehler suchen muß.
C#-Quelltext
1: 2: 3: 4: 5: 6: 7:
| foreach (CheckBox cBox in Controls) { if (cBox is CheckBox) { cBox.Checked = false; } } |
Ok habs jetzt hin bekommen richtig wäre es so:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| CheckBox c = default(CheckBox);
foreach (Control con in this.Controls) { if (con is CheckBox) { c = (CheckBox)con; if (c.Checked) { c.Checked = false; } } } |
Moderiert von
Th69: Codeformatierung überarbeitet.
Th69 - Di 20.03.12 11:01
Hallo Fakiz,
sofern du mindestens C# 3.5 benutzt, kannst du auch kürzer
C#-Quelltext
1: 2: 3: 4:
| foreach (CheckBox checkBox in Controls.OfType<CheckBox>()) {
} |
benutzen.
Alternativ zu deiner Lösung kannst du auch den
as-Operator benutzen (da dann nur einmal gecastet werden muß):
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| foreach (Control control in this.Controls) { CheckBox checkBox = control as CheckBox; if (checkBox != null) { checkBox.Checked = false; } } |
P.S. Und gewöhne dir am besten gleich an passende Variablennamen zu wählen (anstatt Abkürzungen), da dann der Code leichter zu lesen (und zu verstehen) ist.