Hallo zusammen!
Ich habe ein Problem, bei dem ich alleine nicht weiterkomme:
Ich möchte abfragen, ob eine CheckBox aktiviert ist. Der Name der CheckBox liegt als String-Variable vor.
Wie stelle ich es an, dass ich die Variable als Objektnamen verwenden kann?
Eine ähnliche Situation hatte ich bereits bei TextBoxen, dort habe ich das ganze folgendermaßen gelöst:
string AName = "name1";
Control[] ABox = this.Controls.Find(AName, true);
ABox[0].Text = zahl.ToString();
Allerdings funktioniert das bei CheckBoxen nicht.
Die einzige Alternative, die ich finden konnte, ist folgende:
foreach (CheckBox cb in this.Controls)
{
if (cb.Name == AName)
{
if (!cb.Checked)
{
code;
}
}
}
Das gefällt mir erstens nicht, weil ich sehr viele CheckBoxen habe. Abgesehen davon bricht das Programm bei der Ausführung ab, mit der Fehlermeldung, dass GroupBoxen nicht in CheckBoxen konvertiert werden könnten.
Was mache ich falsch?
Hallo Graf und Herzlich Willkommen hier im Forum,
die Antwort liegt in der Fehlermeldung
gerade zu deinem Problem, wurde hier schon so einige male besprochen
Vilele Grüße
Lars
Mach alle Checkboxen in ein Dictionary<string, CheckBox>, dann kannste ganz einfach drauf mit CheckBoxen["name1"].Checked dadrauf zugreifen.
Darth Maim
Hallo!
Der Fehler kommt daher, dass du alle Controls durchläufst, und da ist auch eine GroupBox dabei. Du solltest eher in der for each nur den Control-Typ verwenden und in einer nachfolgenden if-Abfrage auf CheckBox prüfen.
Nobody is perfect. I'm sad, i'm not nobody 🙁
Ja, entweder so wie es tom-essen geschrieben hat, oder folgendermassen:
IEnumerable<CheckBox> checkboxes = this.Controls.OfType<CheckBox>();
foreach (CheckBox c in checkboxes)
{
//code
}
Gruss Aratar