Оптимизированный поиск проверенной кнопки радио в Relevent GroupBox - PullRequest
0 голосов
/ 15 марта 2012

Все, у меня есть GroupBox с несколькими элементами управления (Button с, 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) , но я никогда не работал с VB или LINQ и борюсь с преобразованием. Если есть еще лучший способ, который был бы хорош, поскольку один из GroupBox s содержит значительное количество RadioButton s - я хотел бы использовать LINQ для этого, если это возможно?

Ответы [ 2 ]

2 голосов
/ 15 марта 2012

Предположим, у вас есть для каждого переключателя ОДИН ЖЕ обработчик событий, который при проверке кнопки устанавливает свойство Tag вашего GroupBox равным Tag вашего RadioButton. Во время разработки вы устанавливаете для тега RadioButton желаемое значение перечисления. Если вы хотите получить свою отмеченную кнопку, вам нужно только прочитать свойство Tag, не проходя цикл (элегантный или менее), чтобы проверить каждый элемент управления в вашем GroupBox.

Например:

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

Конечно, это будет эффективно, но вы должны быть уверены, что это хорошо задокументировано, потому что изменение в перечислении создаст проблемы.

1 голос
/ 27 октября 2012
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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...