相关GroupBox中检查单选按钮的优化检索

时间:2012-03-15 10:25:09

标签: c# winforms .net-4.0

全部,我有一个GroupBox有多个控件(Button s,RadioButton等等),我想知道建立哪个RadioButton最有效的方式在GroupBox处于检查状态。我目前有

int nCheckedRadioIdx = 0;
foreach (Control ctrl in groupBoxList.Controls)
{
    if (ctrl.GetType() == typeof(RadioButton))
    {
        if (((RadioButton)ctrl).Checked)
        {
            switch (((RadioButton)ctrl).Name)
            { 
                case "radioButtonGoodCodeSumm":
                    nCheckedRadioIdx = 0;
                    break;
                case "radioButtonBadCodeSumm":
                    nCheckedRadioIdx = 1;
                    break;
                case "radioButtonBadByEpiNo":
                    nCheckedRadioIdx = 2;
                    break;
                case "radioButtonValidCodes":
                    nCheckedRadioIdx = 3;
                    break;
                default:
                    break;
            }
            break;
        }
    }
}

然后我使用枚举器来确定我需要的按钮。这对我来说似乎非常冗长(实际上该死的很丑!)。我已经在VB中使用某种LINQ查询(SO Question)看到了这一点,但我从未使用过VB或LINQ,并且正在努力进行转换。如果有一个更好的方法,因为其中一个GroupBox包含大量RadioButton s - 我想尽可能使用LINQ吗?

2 个答案:

答案 0 :(得分:2)

假设您为每个单选按钮 THE SAME 事件处理程序,当选中该按钮时,将GroupBox的Tag属性设置为RadioButton的Tag。在设计时,您将RadioButton的Tag设置为您想要的枚举值。当您希望检索已选中的按钮时,您只需阅读Tag属性而无需通过循环(优雅或更少)来检查GroupBox中的每个控件。

例如:

private void RadioButton_Checked(oject sender, EventArgs e)
{
    RadioButton radio = ((RadioButton)sender);
    if(radio.Checked)
        groupBoxList.Tag = radio.Tag;
}

当然这会很有效,但是你应该确保记录下来,因为枚举变化的变化会产生问题。

答案 1 :(得分:1)

foreach (var control in groupBox3.Controls)
{                
    RadioButton radio = control as RadioButton;

    if (radio != null && radio.Checked)
    {
        var a = radio.Name;   //it gives the name of radio button is checked
    }
}