.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

Оцени полезность:

11   голосов , оценка 4.455 из 5
Похожие ответы