2017-02-01 58 views
3

这是针对VS2015社区中的VB.NET 4.5项目。如何从列表框中删除所选项目

我想从列表框中删除某些选定的项目,但只有当选定的项目符合条件。我找到了很多关于如何删除选定项目的例子。但是没有任何东西可以嵌套在循环中通过所选项目(至少,我无法得到示例与我正在尝试做的事情...)

这是我的代码:

Dim somecondition As Boolean = True 
    Dim folder As String 
    For i As Integer = 0 To lstBoxFoldersBackingUp.SelectedItems.Count - 1 

     If somecondition = True Then 
      folder = lstBoxFoldersBackingUp.SelectedItems.Item(i) 
      Console.WriteLine("folder: " & folder) 
      lstBoxFoldersBackingUp.SelectedItems.Remove(lstBoxFoldersBackingUp.SelectedItems.Item(i)) 
     End If 
    Next 

控制台输出正确显示当前迭代项目的文本,但我无法使Remove()工作。正如现在的代码,我得到控制台输出,但列表框不会改变。

回答

4

删除项目会更改项目的索引位置。有很多方法可以解决这个问题,但是从你的代码中,尝试向后迭代以避免这个问题。您还应该从Items集合中删除项目,而不是SelectedItems集合:

For i As Integer = lstBoxFoldersBackingUp.SelectedItems.Count - 1 To 0 Step -1 
    If somecondition = True Then 
    folder = lstBoxFoldersBackingUp.SelectedItems.Item(i) 
    Console.WriteLine("folder: " & folder)    
    lstBoxFoldersBackingUp.Items.Remove(lstBoxFoldersBackingUp.SelectedItems(i)) 
    End If 
Next 
+0

为什么大拇指朝下看起来像是一个有效的问题 - 用代码? – codeMonger123

+0

@ codeMonger123我没有downvote - 我试图帮助。 :-) – LarsTech

+0

这有效,但**如何**?选中列表框中的第二项后,当我到达Remove()行时,'i'的值为0,因为它是selecteditems集合中唯一的项目。所以我们传递Remove()方法的值为0,我认为这将是列表框的Items集合中的第一项... – marky