3

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

一些单选按钮已连接,需要通过标题进行解释。为此,我将它们放在 Groupbox 中。但是,组框内的单选按钮不再连接到外面的单选按钮,并且可以从中选择两个。

有没有办法连接单选按钮,以便它们相互反应?或者有没有更好的方法来分组和解释单选按钮然后使用组框?

4

4 回答 4

5

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

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

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

于 2012-06-08T07:53:46.323 回答
3

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

最大的问题无疑是你会给用户带来相当大的混乱。如此之多,以至于您可能应该考虑使用复选框。

于 2012-06-08T10:33:46.853 回答
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);
        });

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

于 2012-06-08T07:50:06.267 回答
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;
    }
}
于 2020-05-16T14:55:00.860 回答