Каков правильный способ прочитать, что 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.