vb.net自动完成与分隔符
我见过几个类似的老问题,但没有一个得到正确回答,所以我再次提出这个话题。我需要的很简单:我有一个由一个或几个单词组成的字符串列表(在这种情况下,用“,”分隔)。我想要一个文本框在用户输入时提示一个或多个字符串,但不仅要考虑字符串的第一个单词,还要考虑其他单词。作为一个愚蠢的例子,如果我的字符串列表是:vb.net自动完成与分隔符
- 串1:自行车,瑞迪施
- 串2:汽车,红色
- 线3:猫,褐色
当用户类型:建议使用“b”字符串1和3(自行车和棕色),当用户输入“c”或“ca”字符串2和3时应提示(汽车和猫)。
到目前为止,我得到了自动完成属性的工作,但只有第一个单词(所以如果我的用户键入“b”只会建议字符串1)。这是代码:
Dim newstr As New AutoCompleteStringCollection
While dr.Read 'this is a datareader from which I get my list
newstr.Add(dr.Item(0).ToString)
End While
dr.Close()
mytextbox.AutoCompleteMode = AutoCompleteMode.SuggestAppend
mytextbox.AutoCompleteSource = AutoCompleteSource.CustomSource
mytextbox.AutoCompleteCustomSource = newstr
我该如何实现我所需要的?我认为它已经实施,但似乎没有。任何帮助将不胜感激
我不认为自动完成的来源是你想要这个。
相反,我建议你在DropDown模式下使用组合框。
ComboBox3.DropDownStyle = ComboBoxStyle.DropDown
你需要做出的排行榜部分可见,当控件获得聚焦...
Private Sub ComboBox3_GotFocus(sender As Object, e As EventArgs) Handles ComboBox3.GotFocus
ComboBox3.DroppedDown = True
End Sub
然后根据每当文本框的变化重建列表内容。
Private Sub ComboBox3_KeyUp(sender As Object, e As EventArgs) Handles ComboBox3.KeyUp
Dim Ss = ComboBox3.SelectionStart
Dim Sl = ComboBox3.SelectionLength
.... rebuilt the list items here ...
Dim Ss = ComboBox3.SelectionStart
Dim Sl = ComboBox3.SelectionLength
ComboBox3.DroppedDown = True
End Sub
完整的例子
Public Class Form4
Dim employees() As String = New String() {"Hamilton, David", _
"Hensien, Kari", "Hammond, Maria", "Harris, Keith", _
"Henshaw, Jeff D.", "Hanson, Mark", "Harnpadoungsataya, Sariya", _
"Harrington, Mark", "Harris, Keith", "Hartwig, Doris", _
"Harui, Roger", "Hassall, Mark", "Hasselberg, Jonas", _
"Harnpadoungsataya, Sariya", "Henshaw, Jeff D.", "Henshaw, Jeff D.", _
"Hensien, Kari", "Harris, Keith", "Henshaw, Jeff D.", _
"Hensien, Kari", "Hasselberg, Jonas", "Harrington, Mark", _
"Hedlund, Magnus", "Hay, Jeff", "Heidepriem, Brandon D."}
Private Sub ComboBox3_GotFocus(sender As Object, e As EventArgs) Handles ComboBox3.GotFocus
ComboBox3.DroppedDown = True
End Sub
Private Sub ComboBox3_KeyUp(sender As Object, e As KeyEventArgs) Handles ComboBox3.KeyUp
Dim Ss = ComboBox3.SelectionStart ' + 1
ComboBox3.Items.Clear()
Dim SearchText As String = UCase(ComboBox3.Text)
For Each Str As String In employees
Dim UStr As String = UCase(Str)
If InStr(UStr, SearchText) = 1 OrElse InStr(UStr, " " & SearchText) > 0 Then
ComboBox3.Items.Add(Str)
End If
Next
ComboBox3.SelectionStart = Ss
ComboBox3.SelectionLength = 0
ComboBox3.DroppedDown = True
End Sub
End Class
确保您设置comboboxstyle到下拉
您能否给我看一个简单的例子?我试图按照你的方案,但它不工作。只要我筛选列表项,第一个被选中(覆盖用户输入的内容)。谢谢! –
查看更新@CarlosBorau –
真棒,谢谢!似乎关键在于Items.Clear()方法 –
你必须找到一个现有的,包括到您的项目,或建立自己的。默认自动完成行为仅从开始检查 –
我试图找到一个,但到目前为止没有运气 –