C# 在单独的面板中配对单选按钮
我有一个windows窗体应用程序,它在窗体中显示一些用户控件。每个用户控件都有一个单选按钮。是否可以手动配对单选按钮,以便同时只能选择其中一个?我的另一个选择是在单击单选按钮时检查每个单选按钮,以便取消选中所有其他单选按钮。向我们展示您的尝试??!!将单选按钮放在GroupBox中以建立分组。@rheitzman这不是我的解决方案,因为我的单选按钮位于不同的用户控件中。每个usercontrol都有多个控件(文本框、标签等),用于添加到创建usercontrol的表单中的每个项。我需要一种方法来通知用户选择了哪个usercontrol,所以我在usercontrol中添加了一个radiobutton。anwser厌恶profided对我来说是一个完美的解决方案。谢谢,我必须添加一个C# 在单独的面板中配对单选按钮,c#,winforms,visual-studio,radio-button,controls,C#,Winforms,Visual Studio,Radio Button,Controls,我有一个windows窗体应用程序,它在窗体中显示一些用户控件。每个用户控件都有一个单选按钮。是否可以手动配对单选按钮,以便同时只能选择其中一个?我的另一个选择是在单击单选按钮时检查每个单选按钮,以便取消选中所有其他单选按钮。向我们展示您的尝试??!!将单选按钮放在GroupBox中以建立分组。@rheitzman这不是我的解决方案,因为我的单选按钮位于不同的用户控件中。每个usercontrol都有多个控件(文本框、标签等),用于添加到创建usercontrol的表单中的每个项。我需要一种方法
AddRadioButton(RadioButton rb)
方法,以便在运行时添加RadioButton。在我的解决方案中,可以随时添加UserControls。我对rb.Checked=(rb==sender)的函数感到惊讶
你能解释一下为什么(rb==sender)
返回布尔值吗?@MaikoKingma每当你用winforms
控件注册事件
监听器时,委托监听器方法遵循NameOfVariable\u NameOfEvent(object sender,EventArgs e)
(或它的一些变体,带有更具体的EventArgs
)。sender
参数是触发/触发事件的控件。因此(rb==sender)
是说,如果单选按钮是被点击的,那么就检查它,因为它触发了事件。显然,这对复选框不起作用,因为它们有切换行为。但是单选按钮总是在点击时被选中。非常感谢,我肯定会经常使用它。
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);
}
}