2014-02-11 71 views
1

对于C#和更重要的是Visual Studio 2012,我都是一个EXTREME新手,所以对不起,如果这看起来像一个简单的问题。所以我正在做一个To Do List应用程序,作为我的第一个使用VS2012的小项目。我有一个名为'checkedListBox1'的CheckedListBox和一个名为'markButton'的按钮,用于删除标记(或选中)的项目。我已经写了下面的代码,但正如你在我的评论中看到的那样,它确实有点奇怪:从我拥有的已选项目集合中删除其他所有已检查的项目。Visual Studio 2012 C#:删除CheckedListBox中的所有*检查项目


private void markButton_Click(object sender, EventArgs e) 
{ 
    // create a collection of the checked items in the to do list 
    // then remove each of them. 
    // **** ERROR: It deletes every other checked item 
    // so it deletes indeces 0..2..4..6... each time. 
    CheckedListBox.CheckedItemCollection checkedItems = checkedListBox1.CheckedItems; 
    for (int i = 0; i < checkedItems.Count; i++) 
    { 
     checkedListBox1.Items.Remove(checkedItems[i].ToString()); 
    } 
} 
+0

那么你想删除所有选中的项目? –

回答

1

当您删除某个项目时,checkedItems收集变得更小。只是删除重复的第一个:

while (checkedItems.Count > 0) 
{ 
    checkedListBox1.Items.Remove(checkedItems[0]); 
} 

或者以相反的顺序取下:

for (int i = checkedItems.Count; i > 0;) 
{ 
    checkedListBox1.Items.Remove(checkedItems[--i]); 
} 

更妙的是,使用CheckedIndices,避免了需要寻找在重复的情况下,配套项目和困惑:

var checkedItemIndices = checkedListBox1.CheckedIndices; 
for (int i = checkedItemIndices.Count; i > 0;) 
{ 
    checkedListBox1.Items.RemoveAt(checkedItemIndices[--i]); 
} 
+0

谢谢,我在几分钟之前就知道了它,并且即将回答它,但我没有足够的代表。是的,这是我使用的解决方案,除了我没有考虑使其更简单的> 0部分。我做了一个变量来存储原始计数,然后用它作为我的'我<___'部分。所以你的方法有点干净,谢谢! –

+0

以前从未注意过'CheckedIndices',很酷。我认为在这两种情况下'--i> 0'都必须更改为'--i> = 0',否则最后选择的项目不会被删除。 –

+0

谢谢格兰特。我用一种不同的方式固定它,但你的观点是有效的。 –

相关问题