23

我有这些组框:

在此处输入图像描述

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

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

有什么直接的方法让我只能得到选中的单选按钮的名称吗?

4

5 回答 5

39

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

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

也看看 CheckedChanged事件。

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

于 2013-08-31T10:57:09.647 回答
8
groupbox1.Controls.OfType<RadioButton>().FirstOrDefault(r => r.Checked).Name

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

干杯

于 2020-03-21T18:29:26.193 回答
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);
于 2013-08-31T10:56:52.743 回答
0

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

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();
     }
于 2018-03-12T15:58:38.707 回答
-1

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

radioGroup.selectedIndex;

如果您使用 Windows 窗体进行设计,我建议实现这样的 RadioGroup 行为(请注意,我的代码是 Java 代码):

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

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

于 2013-08-31T10:57:47.310 回答