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 静态变量 iLeftOff 指定了字符长度
'在窗口上加入text1,list1 '代码如下: Private Sub Text1_Change() Dim strSrch As String Dim iCount As Integer strSrch = Text1.Text For iCount = 0 To List1.ListCount If List1.List(iCount) >= strSrch Then List1.Selected(iCount) = True Exit For End If Next End Sub
建立一个模块 Public Sub ComboBoxChange(ByRef CB As ComboBox) Dim iStart As Integer Dim sString As String
iStart = CB.SelStart If iStart = 0 Then Exit Sub End If
sString = CStr(Left(CB.Text, iStart)) CB.ListIndex = SendMessage(CB.hwnd, CB_FINDSTRING, 0, ByVal sString) CB.SelStart = iStart CB.SelLength = Len(CB.Text) - iStart End Sub 调用: Private Sub txtFName_Change() Call ComboBoxChange(txtFName) End Sub 其实IE的就是一个COMBOBOX控件的格式 应该和我上面的方法一样的
Public Const LB_SELECTSTRING = &H18C 'Public Const CB_SELECTSTRING = &H14D Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long ‘其实 SendMessage 主要都是会用这个的,没它的 Function FastFindStr(mList As ListBox, mStrFind As String) As String ’mList As ListBox 这个可能根据要求而变 Dim lIndex As Long If Len(mStrFind) > 0 Then lIndex = SendMessage(mList.hwnd, LB_SELECTSTRING, -1, ByVal mStrFind) Else lIndex = -1 End If If lIndex >= 0 Then FastFindStr = mList.List(lIndex) Else FastFindStr = "" End If End Function
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 = &H14CPublic Sub ComboBoxChange(ByRef CB As ComboBox) Dim iStart As Integer Dim sString As String
iStart = CB.SelStart If iStart = 0 Then Exit Sub End If
sString = CStr(Left(CB.Text, iStart)) CB.ListIndex = SendMessage(CB.hwnd, CB_FINDSTRING, 0, ByVal sString) CB.SelStart = iStart CB.SelLength = Len(CB.Text) - iStart End Sub Private Sub txtFName_Change() Call ComboBoxChange(txtFName) End Sub
不是很懂
up !
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
静态变量 iLeftOff 指定了字符长度
'代码如下:
Private Sub Text1_Change()
Dim strSrch As String
Dim iCount As Integer
strSrch = Text1.Text
For iCount = 0 To List1.ListCount
If List1.List(iCount) >= strSrch Then
List1.Selected(iCount) = True
Exit For
End If
Next
End Sub
Public Sub ComboBoxChange(ByRef CB As ComboBox)
Dim iStart As Integer
Dim sString As String
iStart = CB.SelStart
If iStart = 0 Then
Exit Sub
End If
sString = CStr(Left(CB.Text, iStart))
CB.ListIndex = SendMessage(CB.hwnd, CB_FINDSTRING, 0, ByVal sString) CB.SelStart = iStart
CB.SelLength = Len(CB.Text) - iStart
End Sub
调用:
Private Sub txtFName_Change()
Call ComboBoxChange(txtFName)
End Sub
其实IE的就是一个COMBOBOX控件的格式
应该和我上面的方法一样的
'Public Const CB_SELECTSTRING = &H14D
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
‘其实 SendMessage 主要都是会用这个的,没它的
Function FastFindStr(mList As ListBox, mStrFind As String) As String
’mList As ListBox 这个可能根据要求而变
Dim lIndex As Long
If Len(mStrFind) > 0 Then
lIndex = SendMessage(mList.hwnd, LB_SELECTSTRING, -1, ByVal mStrFind)
Else
lIndex = -1
End If
If lIndex >= 0 Then
FastFindStr = mList.List(lIndex)
Else
FastFindStr = ""
End If
End Function
我自豪,我用正版。有专门的控件,我就有一个,花了399美元买的。很好用的。
你可以买一个。http://dbi-tech.com。也可以先试用再购买。如果感兴趣我可以先发一个例子给你,你看中了以后,我可以copy一份给你。
hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any)
As Long
Public Const CB_FINDSTRING = &H14CPublic Sub ComboBoxChange(ByRef CB As ComboBox)
Dim iStart As Integer
Dim sString As String
iStart = CB.SelStart
If iStart = 0 Then
Exit Sub
End If
sString = CStr(Left(CB.Text, iStart))
CB.ListIndex = SendMessage(CB.hwnd, CB_FINDSTRING, 0, ByVal sString) CB.SelStart = iStart
CB.SelLength = Len(CB.Text) - iStart
End Sub
Private Sub txtFName_Change()
Call ComboBoxChange(txtFName)
End Sub