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

时间:2012-06-08 07:27:10

标签: c# radio-button windows-forms-designer

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

一些无线电按钮已连接,需要通过标题解释。为此,我把它们放在一个Groupbox中。但是,组合框内的无线电按钮不再连接到外部的那些,并且可以从中选择两个。

有没有办法连接无线电按钮,以便它们互相反应?或者是否有更好的方法来组合和解释无线电按钮然后使用组合框?

4 个答案:

答案 0 :(得分:5)

根据MSDN,RadioButton的设计行为按其容器分组:

  

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

您可以尝试使用您想要链接的RadioButtons的常用事件处理程序并自己处理Check / UnChecking,或者您可以将RadioButtons放在GroupBox的顶部,而不是将它们添加到GroupBox然后BringToFront。

答案 1 :(得分:3)

这是可能的,但它的价格很高。您必须将其AutoCheck属性设置为false,并自行取消选中其他按钮。最不方便的东西是制表符停止,一组按钮只有一个tabstop,但是如果你设置AutoCheck = false,那么每个按钮都可以被标签化。

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

答案 2 :(得分:2)

在Windows窗体中,我认为没有一种简单的方法(如设置GroupName等属性)来对radiobuttons进行分组。最快捷的方法是简单地将radiobuttons分组并收听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);
        });

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

答案 3 :(得分:0)

我通过处理CheckChanged事件解决了这个问题。

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;
    }
}