2017-10-10 44 views
0

有一個包含字符串的清單。 每個循環都會檢查選中的項目,然後將這些項目添加到名爲mylist的字符串列表中,但前提是這些項目尚未添加。需要將項目從checkedlistbox添加到列表並刪除一些

我需要的是檢查列表框中沒有選中的項目,並在從框中取消選中項目後從mylist中刪除字符串。

Basicaly我有一個名爲MYLIST我需要添加任何檢查從checkedboxlist項目MYLIST每當我取消的項目從MYLIST刪除相同的字符串列表。

建議一些解決方案。提前致謝 。

+1

哪裏碼? –

+0

請使用代碼片段更新問題 –

+2

沒有代碼,但我猜'foreach(checkboxList中的var框){if(box.IsChecked){myList.Add(box.Text;}} –

回答

0

下面的代碼有一個foreach循環遍歷CheckBox列表,然後檢查每個項目是否被選中,如果沒有檢查,然後從myList獲取該項的索引並使用RemoveAt屬性從該項刪除該項該列表使用索引。

foreach (var item in checkboxList) { if (!item.IsChecked) { int index = myList.IndexOf(item); if(index != -1) myList.RemoveAt(index); } }

0

請,是那麼親切和審查你的下一個問題(How to Ask)...

就拿事件anyCheckedListBox.ItemCheckMSDN)的優勢:

public class Form1 : Form { 

ListBox anyListBox; 
CheckedListBox anyCheckedListBox; 

public Form1() { 
anyListBox = new ListBox(); 
Controls.Add(anyListBox); 
anyCheckedListBox = new CheckedListBox(); 
anyCheckedListBox.Items.Add("test1"); 
anyCheckedListBox.Items.Add("test2"); 
anyCheckedListBox.Items.Add("test3"); 
anyCheckedListBox.ItemCheck += AnyCheckedListBox_ItemCheck; 
Controls.Add(anyCheckedListBox); 
} 

private void AnyCheckedListBox_ItemCheck(object sender, ItemCheckEventArgs e) 
{ 
    if (e.CurrentValue == CheckState.Unchecked) 
     anyListBox.Items.Add(anyCheckedListBox.Items[e.Index]); 
    else 
     anyListBox.Items.Remove(anyCheckedListBox.Items[e.Index]); 
} 
} 

要注意的是琴絃這個快速和骯髒的解決方案必須是獨一無二的。

0

簡單的實現方法是在循環中添加對List.Remove的調用,如果該項未被選中。假設你的代碼是類似於@ AustinFrench的評論,是這樣的:

注意,你不需要檢查是否調用List.Remove之前的項目存在。如果該項目不存在,它將簡單地返回false。


此外請注意,這是一個O(n^2)操作。它可能會檢查您的複選框列表中每個項目的全部內容myList。如果名單很長,您可以通過首先對列表進行排序並同時通過一對(或至少排序myList,以便更有效地進行搜索),獲得更好的性能。

或者,考慮完全替換myList的內容。這僅需要單次通過您的CheckBoxList:

myList.Clear(); 
foreach (var box in checkboxList) 
{ 
    if (box.IsChecked) 
     myList.Add(box.Text); 
} 

或者,使用LINQ和利用List.AddRange

myList.Clear(); 
myList.AddRange(checkboxList.Where(box => box.IsChecked).Select(box => box.Text)); 
相關問題