繁体   English   中英

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

[英]Optimised Retrieval of the Checked RadioButton in Relevent GroupBox

全部,我有一个具有多个控件( ButtonRadioButton等等)的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吗?

假设您对每个单选按钮都具有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;
}

当然这将是有效的,但是您应该确保对此进行详细记录,因为枚举更改中的更改会产生问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM