请问如何用VB6中的COMBOBOX实现模糊输入后自动匹配下拉列表

alex8315 2014-01-16 05:37:49
是VB6,网上搜到.net里面combobox有ComboBox.AutoCompleteSource 这类的属性,但是VB6里面没有。

请问怎样才能够做到呢?多谢!

...全文
2194 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
figoba 2014-01-23
  • 打赏
  • 举报
回复
引用 9 楼 of123 的回复:
拼音缩写检索需要数据库或查表支持。 1 添加“鬼影”ListBox,不可见。 2 用户可见的 ListBox 每增加一个列表项,就在“鬼影”ListBox 中增加一个 ListIndex 相同的列表项,其值就是第一个列表项各个汉字的汉语拼音首字母。这个可以通过数据库查询或查表得到。 3 剩下的就一样了。在“鬼影”ListBox 中找到列表项,就得到用户可见 Listbox 的对应列表项了。
非常感谢你的回答。 你的意思是说让两个listbox里面的项目一一对应起来,通过拼音缩写确定鬼影listbox里面的listindex,再根据这个listindex确定可见listbox里面的项目吗? 另外,如果输入的是汉字怎么区分?那样我就不需要通过鬼影listbox来中转了,那我需要的就是直接定位可见的listbox了,怎么让程序自动区分?
figoba 2014-01-22
  • 打赏
  • 举报
回复
最近我也需要这个功能,如果能加上拼音缩写检索的功能就更好了。
of123 2014-01-22
  • 打赏
  • 举报
回复
这个 API 可以查找前几个字符匹配的 ComboBox 或 ListBox 的列表项。
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
of123 2014-01-22
  • 打赏
  • 举报
回复
拼音缩写检索需要数据库或查表支持。 1 添加“鬼影”ListBox,不可见。 2 用户可见的 ListBox 每增加一个列表项,就在“鬼影”ListBox 中增加一个 ListIndex 相同的列表项,其值就是第一个列表项各个汉字的汉语拼音首字母。这个可以通过数据库查询或查表得到。 3 剩下的就一样了。在“鬼影”ListBox 中找到列表项,就得到用户可见 Listbox 的对应列表项了。
alex8315 2014-01-21
  • 打赏
  • 举报
回复
没人知道吗?
alex8315 2014-01-20
  • 打赏
  • 举报
回复
引用 4 楼 Previouspage 的回复:
设置combo1的sorted为true
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
你好,感谢你的回复。 但是你的这个代码似乎不能实现我的需求的功能,就是输入任何一个字符如果匹配,后面会自动提示所匹配的项目。
Treenewbee 2014-01-18
  • 打赏
  • 举报
回复
设置combo1的sorted为true
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
alex8315 2014-01-17
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
http://www.vb6.us/tutorials/visual-basic-combo-box-tutorial see Search-As-You-Type ComboBox
非常感谢! 但是试用的时候发现,举个例子输入的前两个字符是找到了,但是输入第三个字符时候下拉框里没有对应项,这时combobox里就会自动清空,也就是连之前输入的两个字符都消失不见了,这个应用时候感觉不是太舒服。 不知道怎么解决呢?多谢!!
threenewbee 2014-01-16
  • 打赏
  • 举报
回复
顺便说下,这个应该用的是标准api,发送search string还是什么消息实现的,不是自动完成(autocomplete) 这个特性win95就有了 自动完成的下拉框比combo的宽度要短,它是文本框的一个特性。当然vb也可以用,调用shautocomplete api。 自动完成最早是IE5新增加的,所以windows 98以上才支持。
threenewbee 2014-01-16
  • 打赏
  • 举报
回复
http://www.vb6.us/tutorials/visual-basic-combo-box-tutorial see Search-As-You-Type ComboBox

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧