我有一个表格,里面有很多单选按钮,每次只能选择一个。
有些单选按钮是连接在一起的,需要用一个标题来解释。为此,我把它们放在一个组框中。但是组框内的单选按钮和组框外的单选按钮不再连接,可以选择两个单选按钮。
有什么方法可以将这些单片按钮连接起来,使它们相互之间有反应?或者有什么更好的方法来分组和解释辐射按钮,而不是使用组框?
这是一个设计行为的 无线电按钮 根据MSDN,由其容器进行分组。
当用户在一个组中选择一个选项按钮(也称为单选按钮)时,其他的按钮会自动清除。在给定容器中的所有RadioButton控件,如表单,构成一个组。要在一个窗体上创建多个组,请将每个组放在它自己的容器中,如GroupBox或Panel控件。
你可以尝试为你想要链接的RadioButtons使用一个通用的偶件处理程序,然后自己处理CheckingUnChecking,或者你可以将RadioButtons放置在GroupBox的顶部,而不是将它们添加到GroupBox中,然后BringToFront。
这是可行的,但代价很高。 你必须将它们的AutoCheck属性设置为false,并自己负责取消选中其他按钮。 最尴尬的是标签停顿,一组按钮只有一个标签停顿,但如果你设置AutoCheck = false,那么每个按钮都可以被标签到。
最大的问题无疑是你会给用户带来相当大的困惑。 以至于你可能应该考虑用复选框来代替。
在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);
});
如果列表中的任何一个单选按钮被选中,其他的单选按钮就会被自动取消选中
我通过处理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;
}
}