在C#中读取哪个RadioButton的正确方法是什么?

时间:2011-04-19 15:14:02

标签: c# c#-4.0

我想知道是否有任何正确的方式来读取从一个GroupBox检查过的RadioButton。到目前为止,我将根据每个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;

    }

编辑:有一些好的好答案,但知道哪个radioButton被按下是一回事,但知道附加到它的返回值是第二。我怎样才能做到这一点?上面的代码让我得到返回值,然后我可以在程序中使用它。

3 个答案:

答案 0 :(得分:12)

您可以使用LINQ

var checkedButton = container.Controls.OfType<RadioButton>().Where(r => r.IsChecked == true).FirstOrDefault();

这假设您将所有单选按钮直接放在同一容器中(例如,面板或表单),并且容器中只有一个组。

否则,您可以在每个组的构造函数中创建List<RadioButton>,然后编写list.FirstOrDefault(r => r.Checked)

Which Radio button in the group is checked?

答案 1 :(得分:0)

另一种方法是将所有RadioButton连接到单个事件,并在单击它们时管理状态。以下代码是从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

答案 2 :(得分:-1)

您可以使用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;
    }
}

您需要创建一个GroupBoxes字典或其他东西来存储每个组的选定单选按钮,其中该组被假定为rb.Parent