2015-09-04 100 views
0

使用Devexpress CheckButton,我想使它们的功能类似于Radiobuttons。如何使CheckButton像RadioButton一样工作

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

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

我假设有短得多的方式来获得其他checkbuttons选中当我按下其中之一。

+1

循环通过按钮的集合,确定这是点击('sender'我相信吗?),然后将剩下假。另外,如果代码正常工作,这对于http://codereview.stackexchange.com/来说更是一份工作。 –

回答

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(); 
+0

这是否必须写在课堂上? – oljko

+0

@oljko你在说什么?如果您正在讨论示例,那么此示例仅用于测试目的,因此您只需在窗体中添加一些按钮并将该示例写入按钮单击事件hanlder中即可。如果你正在谈论'GroupIndex'属性,那么这个属性在你的设计器中是可用的,所以你可以直接在这里设置这个属性的值。 – nempoBu4

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

,并指定该方法的所有复选框onclick事件。

+0

这不会让它缩短:) – oljko

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

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

希望这会有所帮助。

+0

非常感谢! – oljko

相关问题