web-dev-qa-db-de.com

Wie kann ich feststellen, welches Optionsfeld in einer Gruppenbox markiert ist?

Ich habe diese Gruppenboxen:

Enter image description here

Ich möchte einen Code ausführen, der dem aktivierten Status eines Optionsfelds entspricht:

string chk = radiobutton.nme; // Name of radio button whose checked is true
switch(chk)
{
    case "Option1":
        // Some code
        break;

    case "Option2":
        // Some code
        break;

    case "Option3":
        // Some code
        break;
}

Gibt es einen direkten Weg, so dass ich nur den Namen des markierten Optionsfelds erhalten kann?

14
Co. Aden

Sie können alle geprüften RadioButtons wie finden

var buttons = this.Controls.OfType<RadioButton>()
                           .FirstOrDefault(n => n.Checked);

Schauen Sie sich auch CheckedChanged event an.

Tritt ein, wenn sich der Wert der Checked-Eigenschaft ändert.

32
Soner Gönül

Sie sollten sich das Ereignis CheckedChanged genauer ansehen, um den entsprechenden Ereignishandler zu registrieren und den Status der Optionsschaltfläche Checked in einer Variablen zu speichern. Ich möchte jedoch LINQ hier verwenden, nur weil Sie nur eine RadioButtons haben, was die Kosten für das Looping akzeptabel macht:

var checkedRadio = new []{groupBox1, groupBox2}
                   .SelectMany(g=>g.Controls.OfType<RadioButton>()
                                            .Where(r=>r.Checked))
// Print name
foreach(var c in checkedRadio)
   System.Diagnostics.Debug.Print(c.Name);
4
King King

Verwenden Sie anstelle aller RadioButtons das Validated-Ereignis der GroupBox.

private void grpBox_Validated(object sender, EventArgs e)
    {
        GroupBox g = sender as GroupBox;
        var a = from RadioButton r in g.Controls where r.Checked == true select r.Name;
        strchecked = a.First();
     }
0