【问题标题】:pair radio buttons in seperate panels在单独的面板中配对单选按钮
【发布时间】:2016-01-19 03:50:49
【问题描述】:

我有一个 Windows 窗体应用程序,它在窗体中显示一些用户控件。每个用户控件都有一个单选按钮。是否可以手动配对单选按钮,以便同时只能选择其中一个?我的另一个选择是在单击单选按钮时检查每个单选按钮,以便取消选中所有其他单选按钮。

【问题讨论】:

  • 告诉我们你尝试了什么??!!
  • 将 RadioButtons 放在 GroupBox 中以建立分组。
  • @rheitzman 这对我来说不是解决方案,因为我的单选按钮位于不同的用户控件中。每个用户控件都有多个控件(文本框、标签等),用于添加到创建用户控件的表单中的每个项目。我需要一种方法来通知用户选择了哪个用户控件,因此我向用户控件添加了一个单选按钮。 Anwser Loathing 对我来说是一个完美的解决方案。

标签: c# winforms visual-studio radio-button controls


【解决方案1】:
        RadioButton rb1 = new RadioButton { Text = "RB1" };
        RadioButton rb2 = new RadioButton { Text = "RB2" };
        RadioButtonGroup rgb = new RadioButtonGroup(rb1, rb2);

        foreach (RadioButton rb in new [] { rb1, rb2 }) {
            Form f = new Form { Text = rb.Text };
            f.Controls.Add(rb);
            f.Show();
            rb.CheckedChanged += delegate {
                MessageBox.Show(rb.Text + ": " + rb.Checked);
            };
        }



private class RadioButtonGroup {
    RadioButton[] radioButtons = null;
    public RadioButtonGroup(params RadioButton[] radioButtons) {
        this.radioButtons = radioButtons;
        foreach (var rb in radioButtons) {
            rb.AutoCheck = false;
            rb.Click += rb_Click;
        }
    }

    void rb_Click(object sender, EventArgs e) {
        foreach (RadioButton rb in radioButtons)
            rb.Checked = (rb == sender);
    }
}

【讨论】:

  • 谢谢,我必须添加一个AddRadioButton(RadioButton rb) 方法,这样我才能在运行时添加单选按钮。在我的解决方案中,可以随时添加用户控件。我对rb.Checked = (rb == sender); 的功能感到惊讶你能解释一下为什么(rb == sender) 返回一个布尔值吗?
  • @MaikoKingma 每当您使用winforms 控件注册event 侦听器时,委托侦听器方法都会遵循NameOfVariable_NameOfEvent(object sender, EventArgs e) 模式(或者它的一些变体,使用更具体的EventArgs)。 sender 参数是触发/触发事件的control。所以(rb == sender) 是说让单选按钮检查它是否是被点击的那个,因为它触发了事件。显然这不适用于checkboxes,因为它们具有切换行为。但是radiobutton 总是在点击时被选中。
  • 非常感谢,我肯定会更频繁地使用它。
猜你喜欢
  • 2015-10-24
  • 2012-09-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-27
  • 2019-01-08
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多