怎么让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 , 数据库(包含打印,安装,报表)