【问题标题】:How to group Groups of radio buttons in Windows forms如何在 Windows 窗体中对单选按钮组进行分组
【发布时间】:2012-06-12 06:24:31
【问题描述】:

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        我通过处理 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;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2011-01-11
          • 1970-01-01
          • 2011-06-05
          • 2014-05-28
          • 2013-01-25
          • 2013-06-02
          • 2011-11-01
          • 2013-06-14
          • 1970-01-01
          相关资源
          最近更新 更多