2017-02-27 72 views
0

我见过几个类似的老问题,但没有一个得到正确回答,所以我再次提出这个话题。我需要的很简单:我有一个由一个或几个单词组成的字符串列表(在这种情况下,用“,”分隔)。我想要一个文本框在用户输入时提示一个或多个字符串,但不仅要考虑字符串的第一个单词,还要考虑其他单词。作为一个愚蠢的例子,如果我的字符串列表是: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 

我该如何实现我所需要的?我认为它已经实施,但似乎没有。任何帮助将不胜感激

+0

你必须找到一个现有的,包括到您的项目,或建立自己的。默认自动完成行为仅从开始检查 –

+0

我试图找到一个,但到目前为止没有运气 –

回答

1

我不认为自动完成的来源是你想要这个。

相反,我建议你在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到下拉

enter image description here

+0

您能否给我看一个简单的例子?我试图按照你的方案,但它不工作。只要我筛选列表项,第一个被选中(覆盖用户输入的内容)。谢谢! –

+0

查看更新@CarlosBorau –

+0

真棒,谢谢!似乎关键在于Items.Clear()方法 –