.NET 4.x Реализовать в выпадающем списке ComboBox'а поиск по любой части слова - Visual Basic .NET
Формулировка задачи:
Всем доброго времени суток!
Хочу реализовать в выпадающем списке ComboBox'а поиск по любой части слова, а не только с начала.
Столкнулся с такой проблемой:
Есть источник со списком слов,
Вводим в ComboBox одну или несколько букв, к примеру букву "д". В выпадающем списке должны появится слова, в которых есть эта буква.Сам код поиска я уже написал (самый простой вариант, не суть):
Спойлер
Листинг программы
- Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
- ListBox1.Items.Clear() 'список с результатами
- For Each t As String In ListBox2.Items 'список - источник
- If t.ToLower.Contains(ComboBox1.Text.ToLower) Then ListBox1.Items.Add(t)
- Next
- End Sub
Вопрос - как сделать так:
(либо как запихнуть результат в имеющийся ComboBox или как сделать свой?)Решение задачи: «.NET 4.x Реализовать в выпадающем списке ComboBox'а поиск по любой части слова»
textual
Листинг программы
- Dim Index As Integer = 0
- Dim tSourceList() As String = {"Седина-Кузнечная 1", "Садовая-Кудринская 2", "Садовая-Кудринская 3", "Декабристов 36", "Ленинградский 7"}
- Dim NewList As List(Of String) = New List(Of String)
- Dim Test As List(Of String) = New List(Of String)
- Private Sub ComboBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ComboBox1.TextChanged
- ComboBox1.Items.Clear()
- NewList.Clear()
- For Each t As String In tSourceList
- If ComboBox1.Text.Length > 0 Then
- If t.ToLower.Contains(ComboBox1.Text.ToLower) Then
- NewList.Add(t)
- Index = ComboBox1.Text.Length
- Else
- Index = ComboBox1.Text.Length
- End If
- Else
- NewList.Clear()
- End If
- Next
- ComboBox1.DropDownHeight = (ComboBox1.ItemHeight) * (NewList.Count) + 2
- If NewList.Count <= 0 Then
- ComboBox1.Items.Add("")
- ComboBox1.DroppedDown = False
- ComboBox1.SelectionStart = Index
- Else
- If IdentityList(NewList, Test) = True Then
- ComboBox1.SelectionStart = Index
- Cursor = Cursors.Default
- For i = 0 To NewList.Count - 1 Step 1
- ComboBox1.DroppedDown = True
- ComboBox1.Items.Add(NewList(i))
- ComboBox1.SelectionStart = Index
- Next
- Else
- Test.Clear()
- For i = 0 To NewList.Count - 1 Step 1
- Test.Add(NewList(i))
- Next
- ComboBox1.Items.Add("")
- ComboBox1.DroppedDown = False
- ComboBox1.Items.Clear()
- ComboBox1.SelectionStart = Index
- For i = 0 To NewList.Count - 1 Step 1
- ComboBox1.DroppedDown = True
- ComboBox1.Items.Add(NewList(i))
- ComboBox1.SelectionStart = Index
- Next
- Cursor = Cursors.Default
- End If
- End If
- End Sub
- Function IdentityList(ByVal List1 As List(Of String), ByVal List2 As List(Of String)) As Boolean
- IdentityList = True
- If List1.Count - 1 = List2.Count - 1 Then
- For i = 0 To List1.Count - 1 Step 1
- If List1(i) <> List2(i) Then
- Return False
- End If
- Next
- Else
- Return False
- End If
- End Function
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д