Как получить, какой переключатель установлен из группового ящика?

У меня есть эти групповые ящики:

Enter image description here

Я хочу запустить некоторый код в соответствии с проверенным истинным состоянием переключателя, например:

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

Есть ли какой-либо прямой способ, чтобы я мог получить только имя зарегистрированного переключателя?

Ответ 1

Вы можете найти все зарегистрированные RadioButtons, например

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

Также обратите внимание на CheckedChanged событие.

Возникает при изменении значения свойства Checked.

Ответ 2

Вы должны посмотреть на событие 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);

Ответ 3

На мой взгляд, лучше использовать RadioGroup вместо GroupBox. Если вы используете radioGroup, вы всегда можете легко найти выбранный элемент следующим образом:

radioGroup.selectedIndex;

Если вы используете Windows Forms, я предлагаю реализовать такое поведение RadioGroup (обратите внимание, что мой код находится на Java):

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

Вы можете поместить этот блок кода в метод, чтобы вернуть выбранное значение radioButton, а затем вы можете использовать это значение в своей части SWITCH.