Relevent GroupBox中选中单选按钮的优化检索

本文关键字:优化 检索 GroupBox Relevent 单选按钮 | 更新日期: 2023-09-27 18:27:48

所有,我有一个具有多个控件(Buttons、RadioButtons等)的GroupBox,我想知道确定GroupBox中哪个RadioButton处于检查状态的最有效方法。我目前有

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,那就太好了——如果可能的话,我想使用LINQ吗?

Relevent GroupBox中选中单选按钮的优化检索

假设每个单选按钮都有相同的事件处理程序,当选中按钮时,将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;
}

当然,这将是有效的,但您应该确保很好地记录这一点,因为枚举更改中的更改会产生问题。

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