2013-07-17 3 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-» сразу?

EDIT: в случае, если кто-либо спрашивает, список элементов списка растет довольно большой, поэтому я добавляю функцию сортировки, чтобы пользователи могли нарушать свои параметры, если захотят. Вот почему я не фильтрую ничего перед добавлением в список

+0

Попробуйте зацикливание в другом направлении 'Для я = ListBoxPrePublish.Items.Count - 1 до 0 Шага -1' –

+0

Спасибо, но «конец ожидаемого утверждения», когда я добавляю в 0 Шаг -1 –

+0

Можете ли вы опубликовать весь код, модифицированный код кода для обратной петли? «Шаг -1» является действительным заявлением VB.Net. Также 'String' в VB имеет метод' 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

Вы уверены? У вашего начального кода даже был «Exit For», который гарантировал только одно удаление. Можете ли вы пройти через этот код в отладчике, чтобы убедиться, что условие выполнено, и если удаление происходит? –

+0

Прости, Юрий, ты прав. В моих усилиях не копировать/вставлять код, я упустил из виду, что вы удалили это из своего образца кода. Спасибо за помощь, я очень благодарен ей. Это разрешено! –

1

Нет, я не знаю никаких функциональных возможностей типа RemoveRange. И имейте в виду, что вам придется перебирать библиотеку Items назад, когда вы удаляете элементы, или вы получите индексные исключения, потому что как только вы удаляете что-то, это испортит значения индекса всех остальных элементов в итераторе.

+0

Хммм, спасибо за указатель. То, что я сбиваю с толку, я могу удалить все выбранные элементы с циклом For Each, я бы подумал, что я могу это сделать, я должен как-то справиться с тем, что после меня –