如何使 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();