Каков правильный способ прочитать, что RadioButton проверяется на С#?
Мне было интересно, есть ли правильный способ чтения RadioButton, который проверял один GroupBox. Пока я создавал бы что-то в этом направлении для каждого GroupBox.
private int checkRadioButton() {
if (radioButtonKwartal1.Checked) {
return 1;
} else if (radioButtonKwartal2.Checked) {
return 2;
} else if (radioButtonKwartal3.Checked) {
return 3;
} else if (radioButtonKwartal4.Checked) {
return 4;
}
return 0;
}
Изменить: есть некоторые полезные ответы, но знание того, какой радиобаттон нажат, - это одно, но знание возвращаемого значения, привязанного к нему, - 2-е. Как я могу это достичь? Вышеприведенный код позволяет мне получить возвращаемые значения, которые затем я могу использовать позже в программе.
Ответы
Ответ 1
Вы можете использовать LINQ
var checkedButton = container.Controls.OfType<RadioButton>().Where(r => r.IsChecked == true).FirstOrDefault();
Это предполагает, что все переключатели находятся в одном контейнере (например, панели или форме) и что в контейнере есть только одна группа.
В противном случае вы можете сделать List<RadioButton>
в своем конструкторе для каждой группы, а затем написать list.FirstOrDefault(r => r.Checked)
Какая кнопка радио в группе отмечена?
Ответ 2
Альтернативой является подключение всех RadioButtons к одному событию и управление состоянием при нажатии. Следующий код извлекается из MSDN:
void radioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = sender as RadioButton;
if (rb == null)
{
MessageBox.Show("Sender is not a RadioButton");
return;
}
// Ensure that the RadioButton.Checked property
// changed to true.
if (rb.Checked)
{
// Keep track of the selected RadioButton by saving a reference
// to it.
selectedrb = rb;
}
}
http://msdn.microsoft.com/en-us/library/system.windows.forms.radiobutton.aspx
Ответ 3
Вы можете использовать событие CheckedChanged
для создания своего собственного трекера.
Из MSDN:
void radioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButton rb = sender as RadioButton;
if (rb == null)
{
MessageBox.Show("Sender is not a RadioButton");
return;
}
// Ensure that the RadioButton.Checked property
// changed to true.
if (rb.Checked)
{
// Keep track of the selected RadioButton by saving a reference
// to it.
selectedrb = rb;
}
}
Вам нужно будет создать словарь групповых ящиков или что-то, что бы сохранить выбранную радиокнопку на группу, где предполагается, что группа rb.Parent
.