.NET 4.x Реализовать в выпадающем списке ComboBox'а поиск по любой части слова - Visual Basic .NET
Формулировка задачи:
Всем доброго времени суток!
Хочу реализовать в выпадающем списке ComboBox'а поиск по любой части слова, а не только с начала.
Столкнулся с такой проблемой:
Есть источник со списком слов,
Вводим в ComboBox одну или несколько букв, к примеру букву "д". В выпадающем списке должны появится слова, в которых есть эта буква.Сам код поиска я уже написал (самый простой вариант, не суть):
Спойлер
Вопрос - как сделать так:
(либо как запихнуть результат в имеющийся 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