当前位置:编程学习 > VB >>

怎么让combo具有像IE浏览器地址栏一样自动匹配的功能(自动查询)?????

明白我说的意思吗?combo1下拉框具有以下值:

杭州大鹏鞋城
杭州兴达商品市场
武汉小商品批发市场
.........

要实现的功能是这样的:如,当我在combo1中输入了"杭州大"这几个字后,"杭州大鹏鞋城"这个匹配的值就出现在combo1框中,并且"鹏鞋城"这几个字是处于选中状态,这个功能在OFFICE中是常见的,IE地址栏也是这样的,应该相当多的朋友都能理解我说的意思吧!!!!(注:输入的新值不限于只是combo1中现有的值)

我找到以下代码,但是好象不行,请大家看一看,分析一下,该怎么修改.

Option Explicit 

Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal 
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) 
As Long
Public Const CB_FINDSTRING = &H14C
Private Sub Combo1_Change()
Dim iStart As Integer
Dim sString As String
Static iLeftOff As Integer
iStart = 1
iStart = Combo1.SelStart
If iLeftOff <> 0 Then
Combo1.SelStart = iLeftOff
iStart = iLeftOff
End If
sString = CStr(Left(Combo1.Text, iStart))
Combo1.ListIndex = SendMessage(Combo1.hwnd,B_FINDSTRING, -1, ByVal CStr(
Left( ombo1.Text, iStart)))
 
If Combo1.ListIndex = -1 Then
iLeftOff = Len(sString)
combo1.Text = sString
End If
Combo1.SelStart = iStart
iLeftOff = 0
End Sub --------------------编程问答-------------------- 应该这样。我帮你改了改。别忘了结贴给分!!!!!!!

Option Explicit

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const CB_FINDSTRING = &H14C

Private Sub Combo1_Change()
    Dim iStart     As Integer
    Dim sString     As String
    Static iLeftOff     As Integer
    iStart = 1
    iStart = Combo1.SelStart
    
    If iLeftOff <> 0 Then
        Combo1.SelStart = iLeftOff
        iStart = iLeftOff
    End If
    
    sString = CStr(Left(Combo1.Text, iStart))
    Combo1.ListIndex = SendMessage(Combo1.hwnd, CB_FINDSTRING, -1, ByVal CStr(Left(Combo1.Text, iStart)))
      
    If Combo1.ListIndex = -1 Then
        iLeftOff = Len(sString)
        Combo1.Text = sString
    End If
    
    Combo1.SelStart = iStart
    iLeftOff = 0
    
    Combo1.SelLength = Len(Combo1.Text) - iStart
End Sub
--------------------编程问答-------------------- 非常谢谢!我试试 --------------------编程问答-------------------- 我刚刚试过了,可以了,非常谢谢您!
不过如果能再做一点改动,那更好啊,我意思是这样的:
combo1的值如下:

杭州大鹏鞋城 
杭州太平鞋城
杭州兴达商品市场 
武汉小商品批发市场

我本应该输入“杭州大鹏鞋城”,但是我不小心把“大”误入为“太”了,结果出现了“杭州太平鞋城”,并且“平鞋城”这几个字处于选中状态,我想通过back space 键或其他键把选中的一次删除,然后在用该键从后往前可以一个一个地删除,如果能这样的话,不用鼠标更方便;还有就是如果能在输入的时候打开下拉框的话,看起来更方便,Call SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)这样能打开下拉框吗?我把它加入你给我的代码的chang事件中好象没有起作用。

再次谢谢你啊!
补充:VB ,  数据库(包含打印,安装,报表)
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,