我想知道是否有任何正确的方式来读取从一个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被按下是一回事,但知道附加到它的返回值是第二。我怎样才能做到这一点?上面的代码让我得到返回值,然后我可以在程序中使用它。
答案 0 :(得分:12)
您可以使用LINQ
var checkedButton = container.Controls.OfType<RadioButton>().Where(r => r.IsChecked == true).FirstOrDefault();
这假设您将所有单选按钮直接放在同一容器中(例如,面板或表单),并且容器中只有一个组。
否则,您可以在每个组的构造函数中创建List<RadioButton>
,然后编写list.FirstOrDefault(r => r.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
。