2015-09-04 47 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

相關問題