C# 如何对Windows窗体中的单选按钮组进行分组

C# 如何对Windows窗体中的单选按钮组进行分组,c#,radio-button,windows-forms-designer,C#,Radio Button,Windows Forms Designer,我有一个带有许多单选按钮的表单,一次只能选择一个单选按钮 某些单选按钮已连接,需要通过标题进行解释。为此,我把它们放在一个分组框中。但是,groupbox内部的单选按钮不再与外部的单选按钮相连,因此可以从中选择两个单选按钮 有没有办法将单选按钮连接起来,使它们相互作用?或者有没有比使用groupbox更好的方法对单选按钮进行分组和解释?在windows窗体中,我认为没有一种简单的方法(如设置GroupName等属性)对单选按钮进行分组。最快的方法是简单地将集合中的单选按钮分组,并侦听checke

我有一个带有许多单选按钮的表单,一次只能选择一个单选按钮

某些单选按钮已连接,需要通过标题进行解释。为此,我把它们放在一个分组框中。但是,groupbox内部的单选按钮不再与外部的单选按钮相连,因此可以从中选择两个单选按钮


有没有办法将单选按钮连接起来,使它们相互作用?或者有没有比使用groupbox更好的方法对单选按钮进行分组和解释?

在windows窗体中,我认为没有一种简单的方法(如设置GroupName等属性)对单选按钮进行分组。最快的方法是简单地将集合中的单选按钮分组,并侦听checkedchanged事件。例如:

        var rbuttons = new List<RadioButton>{ radioButton1, radioButton2, radioButton3, radioButton4 }; //or get them dynamically..
        rbuttons.ForEach(r => r.CheckedChanged += (o, e) =>
        {
            if (r.Checked) rbuttons.ForEach(rb => rb.Checked = rb == r);
        });
var rbuttons=新列表{radioButton1、radioButton2、radioButton3、radioButton4}//或者动态获取它们。。
rbuttons.ForEach(r=>r.CheckedChanged+=(o,e)=>
{
if(r.Checked)rbuttons.ForEach(rb=>rb.Checked=rb==r);
});

如果选中列表中的任何单选按钮,则其他单选按钮将自动取消选中

这是根据MSDN按容器分组的设计行为:

当用户选择一个选项按钮(也称为单选按钮)时 在一个组中,其他组将自动清除。所有单选按钮 给定容器中的控件(如窗体)构成一个组。到 在一个窗体上创建多个组,将每个组放在各自的窗体中 容器,例如GroupBox或Panel控件


您可以尝试对要链接的单选按钮使用公共事件处理程序,并自行处理选中/取消选中操作,或者您可以将单选按钮放在GroupBox的顶部,而不将其添加到GroupBox中,然后将其添加到GroupToFront。

这是可能的,但代价很高。您必须将其AutoCheck属性设置为false,并自行取消选中其他按钮。最尴尬的事情是制表位不再正常工作,一组按钮只有一个制表位,但如果设置AutoCheck=false,则每个按钮都可以制表位


最大的问题无疑是你会给用户带来相当大的困惑。因此,您可能应该考虑复选框。

< P>我通过处理CestCurchange事件来解决这个问题。

private void radio1_CheckedChanged(object sender, EventArgs e)
{
    if (radio1.Checked)
    {
        // do stuff
        radio2.Checked = false;
    }
}
private void radio2_CheckedChanged(object sender, EventArgs e)
{
    if (radio2.Checked)
    {
        // do stuff
        radio1.Checked = false;
    }
}
可能重复的