如何使CheckButton像RadioButton一样工作

时间:2015-09-04 13:09:30

标签: c# asp.net checkbox radio-button devexpress

使用Devexpress CheckButtons,我想让它们像Radiobuttons一样运作。

下面是我的代码的一部分,我为所有4个检查按钮编写,这意味着它必须与代码行的乘法相乘,这是不可行的方法。

private void cb1_Click(object sender, EventArgs e)
    {
        cb2.checked = false;
        cb3.checked = false;
        cb4.checked = false;
    }

我认为当我按下其中一个按钮时,其他检查按钮取消选中的方法要短得多。

3 个答案:

答案 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();