如何使 CheckButton 像 RadioButton 一样工作
How to make CheckButton work like a RadioButton
使用 Devexpress CheckButtons,我想让它们像 Radiobuttons 一样工作。
下面是我的部分代码,是我为所有 4 个复选按钮编写的,这意味着它必须随着代码行数的增加而增加,这是不可行的方法。
private void cb1_Click(object sender, EventArgs e)
{
cb2.checked = false;
cb3.checked = false;
cb4.checked = false;
}
我认为当我按下其中一个时,有更短的方法可以取消选中其他复选按钮。
尝试这样的事情:
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 事件。
为每个按钮分配相同的事件处理程序,那么您只需要一个方法:
// 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;
}
这个例子看起来很长,因为它很完整,但实际上你只需要事件处理程序和方法。
希望对您有所帮助。
在 DevExpress CheckButton
class 中有 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();
使用 Devexpress CheckButtons,我想让它们像 Radiobuttons 一样工作。
下面是我的部分代码,是我为所有 4 个复选按钮编写的,这意味着它必须随着代码行数的增加而增加,这是不可行的方法。
private void cb1_Click(object sender, EventArgs e)
{
cb2.checked = false;
cb3.checked = false;
cb4.checked = false;
}
我认为当我按下其中一个时,有更短的方法可以取消选中其他复选按钮。
尝试这样的事情:
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 事件。
为每个按钮分配相同的事件处理程序,那么您只需要一个方法:
// 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;
}
这个例子看起来很长,因为它很完整,但实际上你只需要事件处理程序和方法。
希望对您有所帮助。
在 DevExpress CheckButton
class 中有 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();