7,785
社区成员




Private Declare Function SendMessagebyString Lib "user32" Alias "SendMessageA" (ByVal hWND As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Const CB_FINDSTRING = &H14C '在 ComboBox 中模糊查找
Private Const LB_FINDSTRING = &H18F '在 ListBox 中模糊查找
调用:
n = SendMessagebyString(Combo1.hWnd, CB_FINDSTRING, -1, "4200")
如果找到,n 就是第一个匹配项的 Index;否则 n = -1。
你可以在 Change 事件中:
1 检查 Text 中的字符数,如果小于项目记录的全长,用变量(比如说 L)记录此长度,并用 Text 中的文本去查找匹配记录。
2 如果找到(n > -1),将列表项 Combo1.List(n) 复制到 Text 中,并设置 SelStart 和 SelLength 属性:
Combo1.Text = Comobo1.List(n)
Combo1.SelStart = L
Combo1.SelLength = Len(Combo1.Text)
另外,我觉得,楼主贴出的这个“控件”若是在 VB6.0 中倒更像是 TextBox, Command 和 ListBox 组合起来的。
Private Sub Text1_Change()
Dim n As Long, L As Integer
If Len(Text1) < 21 Then
L = Len(Text1)
n = SendMessagebyString(List1.hWnd, LB_FINDSTRING, -1, Text1.Text)
If n > -1 Then
List1.ListIndex = n
Text1.Text = List1.List(n)
Text1.SelStart = L
Text1.SelLength = Len(Text1.Text)
End If
End If
End Sub
Private Sub Combo1_Change()
Dim V As String
V = Combo1.Text
For i = 0 To Combo1.ListCount - 1
If UCase(Combo1.List(i)) Like V & "*" Then Combo1.Text = Combo1.List(i): Combo1.SelStart = Len(V): Combo1.SelLength = Len(Combo1.Text) - Len(V): Exit For
Next
End Sub
Private Sub Form_Load()
Dim t(4) As String
For i = 1 To 3000
Randomize
For J = 0 To 4
t(J) = Chr(Int(65 + Rnd * 25))
Next
Combo1.AddItem Join(t, "")
Next
End Sub