2016-09-19 7 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.

Edit: Я надеюсь, что это сделает его более ясным, что я стремлюсь сделать:

сказать, что я следующий checkedListBoxes: checkedListBox1, 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, и вы хотите ограничить своих пользователей, чтобы иметь возможность проверять только ограниченное количество флажков в них? – Niklas

+0

У меня есть несколько 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 ..... в моем файле дизайнера. Но я многому научился, что вы разместили. Я попытаюсь учесть это в следующий раз, когда буду работать с формами окон. Еще раз спасибо! :) – 5120bee

+0

@ 5120bee im joy Я помог! :) – Niklas