(VB.net ) Поиск указанного текста по всей строке (не только начальных символов) в списке

#vb.net #search #listbox

#vb.net #Поиск #список

Вопрос:

У меня есть список, где каждая строка содержит короткий номер модели из 3-4 символов, за которым следует табуляция, а затем название продукта, которому соответствует номер модели. У меня также есть текстовое поле, которое я использую для поиска в списке.

Код, который я использую до сих пор, работает несколько, просто не совсем так, как мне бы хотелось. Если я введу текст поиска, он выделит результаты в listbox, но только для первых символов, есть ли способ поиска текста по всей строке (индексу) listbox?

Прямо сейчас я использую следующее:

 Private Sub txtSearch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged

    ListBox.SelectedIndex = ListBox.FindString(txtSearch.Text)

End Sub
  

Комментарии:

1. Я пробовал перебирать каждый элемент в listbox и выполнять listbox.items(i).contains = (txtsearch.text) и выходить из цикла / устанавливать selectedindex = i, когда было совпадение, но я получаю неточные результаты.

2. Что вы подразумеваете под «неточным»?

3. Он найдет элементы в списке, которые могут соответствовать критериям поиска, но не в последовательном порядке. Например, содержимое моего списка расположено в алфавитном порядке, и если я буду искать AC, вместо Acura будет выбран Cadillac.

4. Неважно, это была проблема с верхним / нижним регистром. Теперь у меня это работает.

5. Вместо того, чтобы редактировать заголовок, чтобы указать, что проблема решена, вы можете добавить правильный ответ на свой вопрос.

Ответ №1:

Исходя из предположения, что ваше строковое представление является toString() элемента в списке:

 ListBox.SelectedItem.ToString().Contains(txtSearch.Text)
  

Комментарии:

1. я пробовал это без успеха. тем не менее, спасибо за ваш ответ.

2. мне удалось частично использовать это в моем решении, спасибо за вашу помощь.

Ответ №2:

Я заставил это работать, выполнив цикл и используя contains. Проблемы с верхним и нижним регистром давали мне неправильные результаты, поэтому я преобразовал критерии во все нижние.

 For i = 0 To ListBox.Items.Count - 1

     If ListBox.Items(i).ToString.ToLower.Contains(Trim(LCase(txtSearch.Text))) Then
          ListBox.SelectedIndex = i
          Exit For
     End If

Next