【问题标题】:How to make CheckButton work like a RadioButton如何使 CheckButton 像 RadioButton 一样工作
【发布时间】:2015-11-30 15:54:04
【问题描述】:

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

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

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

我认为当我按下其中一个复选框时,有更短的方法可以取消选中其他复选框。

【问题讨论】:

  • 循环遍历一组按钮,确定哪个被点击了(sender我相信?),其余的设为假。此外,如果代码有效,这对codereview.stackexchange.com 来说更像是一项工作。

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


【解决方案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】:

为每个按钮分配相同的事件处理程序,那么您只需要一个方法:

// 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;
}

这个例子看起来很长,因为它是完整的,但实际上你只需要事件处理程序和方法。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    在 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();
    

    【讨论】:

    • 这个必须写在课堂上吗?
    • @oljko 你在说什么?如果您在谈论示例,那么此示例是出于测试目的,因此您可以简单地在表单中添加一些按钮,然后在按钮单击事件处理程序中编写此示例。如果你说的是GroupIndex属性,那么这个属性在你的设计器中是可用的,所以你可以直接在那里设置这个属性的值。
    猜你喜欢
    • 2017-04-11
    • 1970-01-01
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-05
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多