Как получить, какой переключатель установлен из группового ящика?
У меня есть эти групповые ящики:
![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.