有一個包含字符串的清單。 每個循環都會檢查選中的項目,然後將這些項目添加到名爲mylist的字符串列表中,但前提是這些項目尚未添加。需要將項目從checkedlistbox添加到列表並刪除一些
我需要的是檢查列表框中沒有選中的項目,並在從框中取消選中項目後從mylist中刪除字符串。
Basicaly我有一個名爲MYLIST我需要添加任何檢查從checkedboxlist項目MYLIST每當我取消的項目從MYLIST刪除相同的字符串列表。
建議一些解決方案。提前致謝 。
有一個包含字符串的清單。 每個循環都會檢查選中的項目,然後將這些項目添加到名爲mylist的字符串列表中,但前提是這些項目尚未添加。需要將項目從checkedlistbox添加到列表並刪除一些
我需要的是檢查列表框中沒有選中的項目,並在從框中取消選中項目後從mylist中刪除字符串。
Basicaly我有一個名爲MYLIST我需要添加任何檢查從checkedboxlist項目MYLIST每當我取消的項目從MYLIST刪除相同的字符串列表。
建議一些解決方案。提前致謝 。
下面的代碼有一個foreach循環遍歷CheckBox列表,然後檢查每個項目是否被選中,如果沒有檢查,然後從myList獲取該項的索引並使用RemoveAt屬性從該項刪除該項該列表使用索引。
foreach (var item in checkboxList) { if (!item.IsChecked) { int index = myList.IndexOf(item); if(index != -1) myList.RemoveAt(index); } }
請,是那麼親切和審查你的下一個問題(How to Ask)...
就拿事件anyCheckedListBox.ItemCheck
(MSDN)的優勢:
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]);
}
}
要注意的是琴絃這個快速和骯髒的解決方案必須是獨一無二的。
簡單的實現方法是在循環中添加對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));
哪裏碼? –
請使用代碼片段更新問題 –
沒有代碼,但我猜'foreach(checkboxList中的var框){if(box.IsChecked){myList.Add(box.Text;}} –