使用Devexpress CheckButtons,我想让它们像Radiobuttons一样运作。
下面是我的代码的一部分,我为所有4个检查按钮编写,这意味着它必须与代码行的乘法相乘,这是不可行的方法。
private void cb1_Click(object sender, EventArgs e)
{
cb2.checked = false;
cb3.checked = false;
cb4.checked = false;
}
我认为当我按下其中一个按钮时,其他检查按钮取消选中的方法要短得多。
答案 0 :(得分:2)
为每个按钮分配相同的事件处理程序,然后您只需要一个方法:
// Create the checkboxes
CheckBox cb1 = new CheckBox();
CheckBox cb2 = new CheckBox();
CheckBox cb3 = new CheckBox();
CheckBox cb4 = new CheckBox();
private void Form1_Load(object sender, EventArgs e)
{
// Positioning
cb1.Left = 10;
cb2.Left = 10;
cb3.Left = 10;
cb4.Left = 10;
cb1.Top = 10;
cb2.Top = 30;
cb3.Top = 50;
cb4.Top = 70;
// IMPORTANT BIT - Assign even handlers
cb1.Click += new EventHandler(CbClick);
cb2.Click += new EventHandler(CbClick);
cb3.Click += new EventHandler(CbClick);
cb4.Click += new EventHandler(CbClick);
// Add to form
this.Controls.Add(cb1);
this.Controls.Add(cb2);
this.Controls.Add(cb3);
this.Controls.Add(cb4);
}
private void CbClick(object sender, EventArgs e)
{
// Uncheck all
cb1.Checked = false;
cb2.Checked = false;
cb3.Checked = false;
cb4.Checked = false;
// Check the one that was clicked
(sender as CheckBox).Checked = true;
}
这个例子似乎很长,因为它很完整,但实际上你只需要事件处理程序和方法。
希望这有帮助。
答案 1 :(得分:1)
尝试这样的事情:
private void cb_Click(object sender, EventArgs e)
{
cb1.checked = false;
cb2.checked = false;
cb3.checked = false;
cb4.checked = false;
(sender as CheckBox).checked = true;
}
并将此方法分配给所有Checkboxes OnClick事件。
答案 2 :(得分:1)
在DevExpress CheckButton
类中有CheckButton.GroupIndex
属性。如果将多个CheckButton
控件的此属性设置为相同的非负值,则此控件将合并为一个逻辑组,因为一次只能检查一个按钮,因此无需进行就像你在代码中所做的那样
这是一个例子:
var form = new Form();
for (int index = 0; index < 5; index++)
{
var cb = new CheckButton()
{
Left = 10,
Top = 10 + index * 20,
Text = "CheckButton" + index,
GroupIndex = 0 //<= the same group for each CheckButton
};
form.Controls.Add(cb);
}
form.Show();