我有一个带有多个单选按钮的表单,其中一次只能选择一个。
一些无线电按钮已连接,需要通过标题解释。为此,我把它们放在一个Groupbox中。但是,组合框内的无线电按钮不再连接到外部的那些,并且可以从中选择两个。
有没有办法连接无线电按钮,以便它们互相反应?或者是否有更好的方法来组合和解释无线电按钮然后使用组合框?
答案 0 :(得分:5)
根据MSDN,RadioButton的设计行为按其容器分组:
当用户选择一个选项按钮(也称为单选按钮)时 在一个组内,其他人自动清除。所有RadioButton 给定容器中的控件(如Form)构成一个组。至 在一个表单上创建多个组,将每个组放在自己的组中 容器,例如GroupBox或Panel控件
您可以尝试使用您想要链接的RadioButtons的常用事件处理程序并自己处理Check / UnChecking,或者您可以将RadioButtons放在GroupBox的顶部,而不是将它们添加到GroupBox然后BringToFront。
答案 1 :(得分:3)
这是可能的,但它的价格很高。您必须将其AutoCheck属性设置为false,并自行取消选中其他按钮。最不方便的东西是制表符停止,一组按钮只有一个tabstop,但是如果你设置AutoCheck = false,那么每个按钮都可以被标签化。
最大的问题无疑是你会给用户带来相当大的困惑。这么多,你可能应该考虑复选框。
答案 2 :(得分:2)
在Windows窗体中,我认为没有一种简单的方法(如设置GroupName等属性)来对radiobuttons进行分组。最快捷的方法是简单地将radiobuttons分组并收听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);
});
如果选中列表中的任何单选按钮,则会自动取消选中其他单选按钮
答案 3 :(得分: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;
}
}