Laden...

Viele RadioButtons auf checked = true prüfen

Erstellt von Sonne123 vor 13 Jahren Letzter Beitrag vor 13 Jahren 8.455 Views
Thema geschlossen
S
Sonne123 Themenstarter:in
72 Beiträge seit 2010
vor 13 Jahren
Viele RadioButtons auf checked = true prüfen

Hallo,

ich habe mehrere bzw. viele RadioButtons in meiner Form. Ich möchte den aktuellen RadioButton herausfinden, der gerade ausgewählt wurde, also


if (radioButton1.Checked)
{
        Name = radioButton1.Name;

}

da ich aber so viele habe, ca. 20 Stück, ist es sehr aufwendig jeden RadioButton auf checked = true zu überprüfen. Gibt es nicht noch eine andere Möglichkeit z.B. über die Controls der Form also Form1.Controls. .... und dann mit einer Schleife die Controls (Radiobuttons) auf checked = true, den namen auszuelsen und dann fertig!?

Vielen Dank im Vorraus.

S
269 Beiträge seit 2010
vor 13 Jahren

Ich hab das ganze bei einer meiner Anwendungen so gelöst, dass ich bei jedem Radio Button das CheckedChanged Event abegfragt hab...
selbst bei 20 zusammenhängenden Radio Buttons sollten sich ja nich mehr als 2 verändern...
Klar, du hättest dann 20 Methoden in deinem Code und in jeder Methode ne Statusüberprüfung auch Checked... aber es werden dann ja maximal 2 der Events ausgelöst bei jeder Veränderung.

Wobei ich mich Frage ob bei so vielen Radio Buttons eine Combo Box nicht vllt. besser geeignet sein könnte.

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo,

Klar, du hättest dann 20 Methoden in deinem Code und in jeder Methode ne Statusüberprüfung auch Checked.

Nein hast du nicht wenn du allen RadioButtons dasselbe Event registrierst was in seinem Fall auch sinnvoll wäre.
Mit dem Parameter sender findest du dann heraus wer das Event geschmissen hat.

Wobei ich mich Frage ob bei so vielen Radio Buttons eine Combo Box nicht vllt. besser geeignet sein könnte.

Wär auch mein Vorschlag, da 20 RadioButtons doch einiges an Platz benötigen. Ich persönlich würde nur maximal 3 RadioButtons combinieren, darüberhinaus verwende ich grundsätzlich eine ComboBox, da durch die enorme Menge an RadioButtons die Übersicht verloren geht.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Gelöschter Account
vor 13 Jahren

Gibt es nicht noch eine andere Möglichkeit z.B. über die Controls der Form also Form1.Controls. .... und dann mit einer Schleife die Controls (Radiobuttons) auf checked = true, den namen auszuelsen und dann fertig!?

Du sagst es doch schon selbst. Genau so kannst du es machen.
Kleiner Anstoss:


foreach(Control item in _control.Controls)
{
    RadioButton radioButton = item as RadioButton;
    if(null!=radioButton)
    {
       // usw. 
    }
}

1.552 Beiträge seit 2010
vor 13 Jahren

Ein weiterer Denkanstoss, wenn auch nicht unbedingt nötig (und schön), wäre im SelectEvent welches wie ich bereits vorschlug alle RadioButtons dasselbe haben, den sender als Instanzvariable zu speichern, dann kann man direkt wissen welcher RadioButton selektiert wurde.

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

K
10 Beiträge seit 2011
vor 13 Jahren

Hallo an alle...

Sebastian, ich versuche diesen Code anzuwenden, allerdings tritt bei mir immer wieder folgender Fehler auf:

Fehlermeldung:
"Object reference not set to an instance of an object."

Troubleshooting tip:
"use the "ne" keyword to create a new instance"

Weiß jemand was ich hier falsch mache? Die Zeile "if (radioB.Checked == true)" wird dabei immer gelb markiert, wenn der Fehler auftritt..

foreach (Control item in panel4.Controls)
                {

                    RadioButton radioB = item as RadioButton;
                    if (radioB.Checked == true)
                    {
                        radioButton1.Checked = true;
                        /// Save the Text of checked radio button
                        string RadioButtonTExt = radioB.Text;

Gruß an alle

458 Beiträge seit 2007
vor 13 Jahren

Pruefe, ob das item auch ein RadioButton ist.

be the hammer, not the nail!

1.552 Beiträge seit 2010
vor 13 Jahren

Hallo k.karin,

ja, du gehst mit der foreach alle Controls durch, damit auch all jene die nicht vom Typ RadioButton sind.
Das mit dem as hast du schon richtig erkannt. Fehler wird dort keiner geworfen, jedoch falls das as fehlschlägt wird null zurückgegeben. Dadurch bekommst du in der nächsten Zeile auch die NullReferenceException
[FAQ] NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt

Gruß
Mcihael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

Thema geschlossen