aashish_9601 Ответов: 1

Пользовательское автозаполнение для текстового поля


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

Поскольку встроенная функция автозаполнения предлагает только те значения, которые начинаются с текста, я подумал о создании пользовательского элемента управления

После поиска в сети я узнал, что должен использовать ToolStripDropDown, ToolStripControlHost и ListBox для отображения пользовательского списка.


Ниже приведен код usercontrol, который я использую

Проблема в том , что когда отображается ToolStripDropDown, он занимает фокус, и пользователь не сможет продолжить ввод текста.
Для решения этой я поставил автосохранение на ToolStripDD false, что проблема решена.

Но теперь, когда отображается ToolStripDD и если пользователь максимизирует/мин. или перемещает или нажимает на строку заголовка формы, выпадающий список не закрывается.

Пожалуйста, предложите мне какой-нибудь обходной путь для этого.

С уважением

Что я уже пробовал:

Public Class MySearchBoxNew
 
    Dim PopUpControl As ToolStripDropDown
    Dim List_Box As ListBox
    Dim Control_Host As ToolStripControlHost
 
 
    Private Sub MySearchBoxNew_Enter(sender As Object, e As System.EventArgs) Handles Me.Enter
        PopUpControl = New ToolStripDropDown
        List_Box = New ListBox
        Control_Host = New ToolStripControlHost(List_Box)
 
 
        List_Box.BorderStyle = BorderStyle.None
        List_Box.SelectionMode = SelectionMode.One
        List_Box.BindingContext = New BindingContext
        List_Box.IntegralHeight = True
 
        List_Box.Items.Clear()
        List_Box.Items.Add("A")
        List_Box.Items.Add("B")
        List_Box.Items.Add("c")
        List_Box.Items.Add("D")
 
        Control_Host.Padding = New Padding(0)
        Control_Host.Margin = New Padding(0)
        Control_Host.AutoSize = False
 
 
        PopUpControl.Padding = New Padding(0)
        PopUpControl.Margin = New Padding(0)
        PopUpControl.Width = Me.TextBox1.Width
        PopUpControl.AutoSize = True
        PopUpControl.AutoClose = False  ' **** **** **** ****
        PopUpControl.Items.Add(Control_Host)
 
    End Sub
 
    Private Sub MySearchBoxNew_Leave(sender As Object, e As System.EventArgs) Handles Me.Leave
        Me.DiscardControls()
    End Sub
 
    Private Sub MySearchBoxNew_LostFocus(sender As Object, e As System.EventArgs) Handles Me.LostFocus
        Me.DiscardControls()
    End Sub
 
    Private Sub ShowDropDown()
        Dim pnt As Point = New Point(Me.TextBox1.Location.X, Me.TextBox1.Location.Y + Me.TextBox1.Height)
        Dim PointToShowMenu As Point = Me.PointToScreen(pnt)
 
        If PopUpControl Is Nothing Then PopUpControl = New ToolStripDropDown
        If List_Box Is Nothing Then List_Box = New ListBox
        If Control_Host Is Nothing Then Control_Host = New ToolStripControlHost(List_Box)
        PopUpControl.Show(PointToShowMenu)
    End Sub
 
    Private Sub CloseDropDown()
        PopUpControl.Hide()
    End Sub
    Private Sub DiscardControls()
        If PopUpControl.Visible Then PopUpControl.Close()
        If PopUpControl IsNot Nothing Then PopUpControl.Close()
        Control_Host = Nothing
        PopUpControl = Nothing
        List_Box = Nothing
    End Sub
  
End Class

Gerry Schmitz

Вы спрашиваете о "мнениях". Или для того, чтобы кто-то делал для вас работу. Сколько слов будет совпадать, когда я наберу букву "е"? а? - эй! ИК? угорь? ли. еке. тройник. меня.....

1 Ответов

Рейтинг:
2

Maciej Los

Проверить это: c# - настройка автозаполнения текстового поля - переполнение стека[^]

Для получения более подробной информации, пожалуйста, смотрите: текстовый.Свойство AutoCompleteCustomSource (System.Окна.Формы) | Microsoft Docs[^]