2011-04-28 38 views
3

我做了一個勝利表單,並給出一些複選框,顯示可供學生使用的課程,通過欺騙複選框,他將能夠告訴他要執行哪些課程,但是我想在他退出時他檢查三個課程,如果他嘗試檢查第四個複選框,則應該顯示消息框告訴他他不能選擇超過三個,並且不應該檢查第四個複選框。那我該怎麼做呢?有限檢查c中的複選框#

回答

5

你必須實現一個OnCheckedChange處理程序並將其設置爲每個複選框。 這會根據複選框的狀態增加/減少計數器。

private int checkCounter; 

    private void OnCheckedChanged(object sender, EventArgs e) 
    { 
     // Increase or decrease the check counter 
     CheckBox box = (CheckBox) sender; 
     if (box.Checked) 
      checkCounter++; 
     else 
      checkCounter--; 

     // prevent checking 
     if (checkCounter == 4) 
     { 
      MessageBox.Show("YOU ARE EVIL", "Bad"); 
      box.Checked = false; 
     } 

    } 

如果達到您的數量,您可以輸出消息框並重置複選框。 就是這樣。

並且不要忘記將此檢查處理程序應用於複選框的所有CheckedChange事件。

+0

所以我覺得有這個checkcalender適用於所有的CheckedChanged事件只是分配每個複選框的CheckedChanged事件checkBox1_CheckedChanged()事件,然後記下該代碼,你會看到的結果更好的辦法...... .........這個很好的答案。 – avirk 2011-04-28 17:44:24

1

使用複選框的CheckChanged event和計數選中的複選框的當前數量的表格上,然後顯示一個消息框,如果它目前超過3

1

假設你正在使用的WinForms取消觸發事件的複選框,複選框控件有一個OnCheckStateChanged事件。連線您所有複選框的事件以調用另一個功能。在此功能中,您可以跟蹤已選中的方框總數,並顯示一個彈出框讓用戶知道已達到最大值。

4

我建議您在處理未知數量的選項時使用CheckedListBox。這是一個完整的示例,顯示如何使用ItemCheck事件來限制選擇的總數。

var box = new CheckedListBox 
    { 
     Dock = DockStyle.Fill, 
     CheckOnClick = true 
    }; 
box.ItemCheck += (sender, e) => 
    { 
     // is the item being checked when 3 are already checked? 
     if (e.NewValue == CheckState.Checked && box.CheckedItems.Count == 3) 
     { 
      // block the change 
      e.NewValue = CheckState.Unchecked; 
     } 
    }; 
for (var i = 0; i < 10; i++) 
{ 
    box.Items.Add("item " + i); 
} 
new Form {Controls = {box}}.ShowDialog(); 

編輯: 您可以通過刪除列表中的邊框,嵌套它GroupBox內,改變背景顏色創建分組的外觀。

box.BorderStyle = BorderStyle.None; 
box.BackColor = Control.DefaultBackColor; 
box.MultiColumn = true; 
box.IntegralHeight = false; 
var group = new GroupBox 
    { 
     Text = "Options", 
     Dock = DockStyle.Fill, 
     Controls = {box} 
    }; 

Group Check Box

+0

這是一個很好的答案,但我拿了一個groupbox放置複選框,所以我該如何做。 – avirk 2011-04-28 05:56:42

+0

您可以通過將CheckListBox放在GroupBox中並將背景顏色設置爲默認背景色來僞裝它。 – 2011-04-28 06:12:24

2

您將有火一樣的事件處理程序,所有的CheckedBoxes CheckChanged事件。

CheckBox1.CheckedChanged += new System.EventHandler(MyCheckedChanged) 
CheckBox2.CheckedChanged += new System.EventHandler(MyCheckedChanged) 

private void MyCheckedChanged(object sender, EventArgs e) 
{ 
     CheckBox checkbox = sender as CheckBox; 

     // Check all the checked items. If already 3 selectec 
     checkbox.Checked = false; 
}