两个.net的: http://www.vibig.net/Article_Show.asp?ArticleID=560 http://faq.lvjiyong.com/item/26215/ vb的: 模仿IE自动完成的ComboBox 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 Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Private Const CB_SHOWDROPDOWN = &H14F Private Const WM_SETREDRAW As Long = &HB& Private Const CB_FINDSTRING As Long = &H14C& 'iKeyCode目的:传递KeyDown事件中的KeyCode Private iKeyCode As Integer Public Sub SearchCombo(InControl As Object) On Error GoTo errTrap
Dim StrPos As Long Dim lPos As Long Dim SearchStr As String
If TypeOf InControl Is ComboBox Then StrPos = InControl.SelStart SearchStr = Left$(InControl.Text, StrPos)
If lPos >= 0 Then InControl.Text = InControl.List(lPos) InControl.ListIndex = lPos End If
With InControl .SelStart = StrPos .SelLength = Len(InControl.Text) End With End If Exit Sub errTrap: MsgBox Err.Description End Sub Private Sub Combo1_Change() If iKeyCode <> vbKeyBack And iKeyCode <> vbKeyReturn Then SearchCombo Combo1 SendMessageLong Combo1.hwnd, CB_SHOWDROPDOWN, True, 0 End If End Sub Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer) iKeyCode = KeyCode End Sub Private Sub Form_Load() Combo1.AddItem "asqwed" Combo1.AddItem "fgtthgh" Combo1.AddItem "nfgftrtyr" Combo1.AddItem "werwerwe" Combo1.AddItem "ytrtyrtyrty" Combo1.AddItem "bfrthrtyrt" Combo1.AddItem "rewerwe" Combo1.AddItem "vsfsdf" End Sub http://www.cnblogs.com/lxcc/archive/2004/11/17/64717.html
比如:
a1
a2
a3当我输入a的时候就自动把a开头的资源列出来供选择 同样,当输入gh的时候就把gh开头的列出来
http://www.vibig.net/Article_Show.asp?ArticleID=560
http://faq.lvjiyong.com/item/26215/
vb的:
模仿IE自动完成的ComboBox
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
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const CB_SHOWDROPDOWN = &H14F
Private Const WM_SETREDRAW As Long = &HB&
Private Const CB_FINDSTRING As Long = &H14C& 'iKeyCode目的:传递KeyDown事件中的KeyCode
Private iKeyCode As Integer Public Sub SearchCombo(InControl As Object)
On Error GoTo errTrap
Dim StrPos As Long
Dim lPos As Long
Dim SearchStr As String
If TypeOf InControl Is ComboBox Then
StrPos = InControl.SelStart
SearchStr = Left$(InControl.Text, StrPos)
lPos = SendMessage(InControl.hwnd, CB_FINDSTRING, 0, ByVal SearchStr)
If lPos >= 0 Then
InControl.Text = InControl.List(lPos)
InControl.ListIndex = lPos
End If
With InControl
.SelStart = StrPos
.SelLength = Len(InControl.Text)
End With
End If
Exit Sub
errTrap:
MsgBox Err.Description
End Sub
Private Sub Combo1_Change()
If iKeyCode <> vbKeyBack And iKeyCode <> vbKeyReturn Then
SearchCombo Combo1
SendMessageLong Combo1.hwnd, CB_SHOWDROPDOWN, True, 0
End If
End Sub Private Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
iKeyCode = KeyCode
End Sub Private Sub Form_Load()
Combo1.AddItem "asqwed"
Combo1.AddItem "fgtthgh"
Combo1.AddItem "nfgftrtyr"
Combo1.AddItem "werwerwe"
Combo1.AddItem "ytrtyrtyrty"
Combo1.AddItem "bfrthrtyrt"
Combo1.AddItem "rewerwe"
Combo1.AddItem "vsfsdf"
End Sub http://www.cnblogs.com/lxcc/archive/2004/11/17/64717.html
因为一些特殊的原因,不能使用组合框加列表框模拟的方式,并且效果也不好。
所以看来只能通过IAutoComplete接口了。
在.NET中是比较容易实现的,直接提供了这样的功能,但VB6就不知道怎么办了……
请帮帮我把
bayougeng(红雨) ,前面已经说了,不用这个来模拟,而且效果不会怎么好。
其实,用VB来实现的代码也有,作者也是帮我的忙才写的(在此表示感谢),地址:
http://blog.csdn.net/lingll/archive/2006/05/10/722760.aspx
但是不知道是什么原因,这个代码在IDE下正常,编译后就出错……
调试出错程序发现,出错点在Err.Raise S_FALSE处,但不知道应该怎么解决这个问题。
高手们努力吧,这个功能不错的!
谢谢。