如何从组合框中选中哪个单选按钮?

时间:2013-08-31 10:51:48

标签: c# windows-forms-designer

我有这些群组:

Enter image description here

我想根据检查的单选按钮的真实状态运行一些代码,如:

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;
}

有没有直接的方式让我只能获得已选中的单选按钮的名称?

5 个答案:

答案 0 :(得分:33)

您可以找到所有已选中的RadioButtons,如

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

另请查看CheckedChanged事件。

  

当Checked属性的值发生更改时发生。

答案 1 :(得分:4)

您应该查看CheckedChanged事件以注册相应的事件处理程序,并将Checked单选按钮状态存储在某个变量中。但是,我想在这里使用LINQ只是因为你只有一些RadioButtons,这使得循环的成本可以接受:

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);

答案 2 :(得分:0)

使用GroupBox的Validated事件,而不是检查所有RadioButtons。

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();
     }

答案 3 :(得分:0)

groupbox1.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked).Name

这将获得选中的单选按钮的名称。如果以后要使用它,可以通过存储到变量中来存储名称。

干杯?

答案 4 :(得分:-1)

在我看来,如果你使用RadioGroup而不是GroupBox会更好。如果您使用radioGroup,您总是可以像这样轻松找到所选项目:

radioGroup.selectedIndex;

如果你使用Windows Forms进行设计,我建议像这样实现RadioGroup行为(请注意我的代码是用Java编写的):

for (Component comp:groupBox1.components) {
    if (((RadioButton)comp).selected)
        return ((RadioButton)comp).value;
}

您可以将此代码块放在方法中以返回所选的radioButton值,然后您可以在SWITCH部分中使用此值。