2016-09-19 165 views
-1

在C#中,一個checklistbox我發現下面的不夠好:如何在多個選中的列表框中限制選擇?

private void checkedListBox1_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
if (e.NewValue == CheckState.Checked && checkedListBox1.CheckedItems.Count >= 3) 
    e.NewValue = CheckState.Unchecked; 
} 

但是我有很多檢查列表框,我想實現在所有這些不同的限制。比如我想限制我的checkedListBox1只有3項選擇,而checkedListBox2將被限制在2個選擇等等...

我試圖使多個checkedListBox_ItemCheck方法,但似乎沒有影響checklistboxes的其餘部分。它隻影響我的第一個。任何人都可以幫助我嗎?

非常感謝,我剛剛開始使用Windows窗體。

編輯:我希望這將使它更清楚我的目標是什麼:

說我有以下checkedListBoxescheckedListBox1, checkedListbox2, checkedListBox3

這裏就是我想要做的事:

checkedListBox1 = (/*limit the number of items users are able to select to only 3 items*/);

checkedListBox2 = (/*limit the number of items users are able to select to only 2 items*/);

checkedListBox3 = (/*limit the number of items users are able to select to only 4 items*/);

+0

所以你有一個checkedListbox,你想限制你的用戶只能檢查限制數量的checkboxitems? – Niklas

+0

我有幾個checkedListBoxes,我想做一個函數來限制不同checkedListBoxes的選擇。例如:(checkedListBox1 =限制選擇項目的數量爲3個項目); (checkedListBox2 =限制只選擇2項的項目數); (checkedListBox3 =限制只選擇4項的項目數);等.... – 5120bee

+0

讓我知道如果這適用於你,我測試它,它在我的情況下工作。 – Niklas

回答

1

爲了實現這一點,你可以進行以下Method

 public void LimitCheckedListBoxMaxSelection(int maxCount, ItemCheckEventArgs e) 
     { 
      if (checkedListBox1.CheckedItems.Count == maxCount) 
      { 
       if (!checkedListBox1.GetItemChecked(checkedListBox1.SelectedIndex)) 
        e.NewValue = e.CurrentValue; 
      } 
     } 


然後使用它,你就必須調用該方法在ItemCheck事件CheckedListBox的。
第一個參數是您要強制執行的限制,即允許的最大檢查項數。
第二個參數是控件事件ItemCheckEventArgs,默認情況下它被命名爲e

然而
你也可以做一個delegate,並調整了Method多一點使它成爲ItemCheck事件附加到您的CheckedListBox通過執行以下操作:

public void LimitCheckedListBoxMaxSelection(CheckedListBox checkedLB, int maxCount) 
{ 
    checkedLB.ItemCheck += (o, args) => 
    { 

     if (checkedListBox1.CheckedItems.Count == maxCount) 
     { 
      if (!checkedListBox1.GetItemChecked(checkedListBox1.SelectedIndex)) 
       (args as ItemCheckEventArgs).NewValue = (args as ItemCheckEventArgs).CurrentValue; 
     } 
    }; 

} 

,然後才能使用這將不得不在您的表單的Load事件中調用此方法,並將您想要限制的CheckedListBox通過以下方法按CheckedListBox

private void MainForm_Load(object sender, EventArgs e) 
{ 

    LimitCheckedListBoxMaxSelection(checkedListBox1, 3); 

} 
+0

嗨!對不起,有點遲到了。我想我的問題是因爲我在我的設計器文件中遺漏了「this.CheckedBoxtList .....」這行代碼。但是我從你發佈的內容中學到了很多東西。下次我使用Windows窗體時,我會盡量記住它。再次感謝! :) – 5120bee

+0

@ 5120bee我很高興我幫助! :) – Niklas

相關問題