2013-07-17 115 views
0

我正在使用vb.net中的列表框,並試圖從列表框中刪除所有不包含特定文本的項目一個按鈕。這裏是我的代碼:vb.net listbox-刪除所有不包含特定文本的項目

Dim i As Integer 
    For i = 0 To ListBoxPrePublish.Items.Count - 1 
     If InStr(ListBoxPrePublish.Items(i), "-8-") > 0 = False Then 
      ListBoxPrePublish.Items.RemoveAt(i) 
      Exit For 
     End If 
    Next 

雖然這一次只能刪除1個項目。我怎樣才能調整這個刪除所有不包含「-8-」的項目?

編輯:如果有人問,列表框項目列表越來越大,所以我添加了一個排序功能,以便用戶如果願意可以縮小它們的選項。這就是爲什麼我沒有過濾任何東西之前添加到列表框

+0

嘗試在不同方向'對於i = ListBoxPrePublish.Items.Count循環 - 1向0步驟-1' –

+0

謝謝但「預計聲明的結尾」,當我添加到0步驟-1 –

+0

你能發佈完整的代碼後向循環代碼修改嗎? '步驟-1'是一個有效的VB.Net語句。另外在VB中'String'有'Contains'方法,所以你可以將你的檢查做爲'If ListBoxPrePublish.Items(i).Contains(「 - 8-」)Then' –

回答

1

下面是我在評論中提到向後循環的完整代碼 - 它應該工作:

For i as Integer = ListBoxPrePublish.Items.Count - 1 To 0 Step -1 
    If Not ListBoxPrePublish.Items(i).Contains("-8-") Then 
     ListBoxPrePublish.Items.RemoveAt(i) 
    End If 
Next 
+0

謝謝,我明白我的錯誤在哪裏。不幸的是,這產生了與我最初的代碼相同的結果。仍然只刪除每個按鈕點擊1個項目。 –

+1

你確定嗎?你的初始代碼甚至有「退出」,只保證一次刪除。你可以在調試器中通過這段代碼來查看條件是否被滿足,並且如果正在移除? –

+0

對不起尤里,你是對的。爲了不復制/粘貼代碼,我忽略了你從代碼示例中刪除了代碼。感謝您的幫助,我非常感謝。這已解決! –

1

不,我不知道任何RemoveRange類型的功能。並且請注意,您需要在刪除項目時向後循環顯示列表框Items,否則將得到索引異常,因爲一旦刪除了某些內容,就會混淆迭代器中所有剩餘項目的索引值。

+0

嗯,謝謝你的指針。我發現令人困惑的是我可以使用For Each循環刪除所有選定的項目,我認爲是我可以做到這一點,我應該以某種方式能夠完成我後 –

相關問題