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

问题描述 投票:3回答:4

我有一个表格,里面有很多单选按钮,每次只能选择一个。

有些单选按钮是连接在一起的,需要用一个标题来解释。为此,我把它们放在一个组框中。但是组框内的单选按钮和组框外的单选按钮不再连接,可以选择两个单选按钮。

有什么方法可以将这些单片按钮连接起来,使它们相互之间有反应?或者有什么更好的方法来分组和解释辐射按钮,而不是使用组框?

c# radio-button windows-forms-designer
4个回答
5
投票

这是一个设计行为的 无线电按钮 根据MSDN,由其容器进行分组。

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

你可以尝试为你想要链接的RadioButtons使用一个通用的偶件处理程序,然后自己处理CheckingUnChecking,或者你可以将RadioButtons放置在GroupBox的顶部,而不是将它们添加到GroupBox中,然后BringToFront。


3
投票

这是可行的,但代价很高。 你必须将它们的AutoCheck属性设置为false,并自己负责取消选中其他按钮。 最尴尬的是标签停顿,一组按钮只有一个标签停顿,但如果你设置AutoCheck = false,那么每个按钮都可以被标签到。

最大的问题无疑是你会给用户带来相当大的困惑。 以至于你可能应该考虑用复选框来代替。


2
投票

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

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


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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.