2017-02-01 133 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