实例源码(VB6)
步骤
1:建一新工程--〉windows应用程序;
2:在窗体上放一ComboBox和一个ListBox,不要修改任何属性
3:在窗体代码文件里加入如下代码:
Private Sub Combo1_Change()
Dim s As String
Dim i As Integer
Dim flag As Boolean '指示是否在列表中有一您输入字母开头的项
s = Combo1.Text
flag = False
For i = 0 To List1.ListCount - 1
If InStr(List1.List(i), s) = 1 Then
List1.ListIndex = i
List1.Visible = True
flag = True
Exit For
End If
Next
If Not flag Then
List1.Visible = False
End If
End Sub
Private Sub Combo1_DropDown()
List1.Visible = False
End Sub
Private Sub Combo1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
If List1.Visible = True Then
Combo1.Text = List1.List(List1.ListIndex)
End If
List1.Visible = False
End If
End Sub
Private Sub Combo1_LostFocus()
List1.Visible = False
End Sub
Private Sub Form_Load()
'组合框与列表框的列表内容一致
With Combo1
.AddItem "abc"
.AddItem "abcd"
.AddItem "abcde"
.AddItem "abcdef"
.AddItem "abcdefg"
End With
With List1
.Visible = False '初始不可见
.AddItem "abc"
.AddItem "abcd"
.AddItem "abcde"
.AddItem "abcdef"
.AddItem "abcdefg"
End With
End Sub
Private Sub List1_Click()
If List1.Visible = True Then
Combo1.Text = List1.List(List1.ListIndex)
List1.Visible = False
End If
End Sub
''以下声明用于16位
'Const WM_USER = &H400
'Const CB_SHOWDROPDOWN = (WM_USER + 15)
'Private Declare Function SendMessage Lib "User" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
'以下声明用于32位
Const CB_SHOWDROPDOWN = &H14F
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
Dim i As Integer, j As Integer
Dim Tmp As Integer
Dim Arr(1 To 3, 1 To 5) As String
Private Sub Combo1_KeyPress(KeyAscii As Integer)
If KeyAscii = Asc(vbCrLf) Then
Text1.Text = Combo1.Text
Text1.SetFocus
Combo1.Clear
Form_Load
End If
End Sub
' Dim nret As Long
' nret = SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)
End Sub
'按回车选择
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = Asc(vbCrLf) Then
If Combo1.ListCount > 0 Then
For i = 1 To Combo1.ListCount
If Trim(Text1.Text) = Combo1.List(i - 1) Then
Tmp = Combo1.ItemData(i - 1)
Combo1.Clear
Combo1.SetFocus
Combo1.AddItem Arr(Tmp, 1), 0
Combo1.AddItem Arr(Tmp, 2), 1
Combo1.AddItem Arr(Tmp, 3), 2
Combo1.AddItem Arr(Tmp, 4), 3
Combo1.AddItem Arr(Tmp, 5), 4
'自动下拉 Combo1
Dim nret As Long
nret = SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)
Exit For
End If
Next
If i = Combo1.ListCount + 1 Then
MsgBox "没有该选项", vbInformation
Text1.SetFocus
Text1.Text = ""
Combo1.Clear
Form_Load
End If
''以下声明用于16位
'Const WM_USER = &H400
'Const CB_SHOWDROPDOWN = (WM_USER + 15)
'Private Declare Function SendMessage Lib "User" (ByVal hwnd As Integer, ByVal wMsg As Integer, ByVal wParam As Integer, lParam As Any) As Long
'以下声明用于32位
Const CB_SHOWDROPDOWN = &H14F
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
Dim i As Integer, j As Integer
Dim Tmp As Integer
Dim Arr(1 To 3, 1 To 5) As String
Private Sub Form_Load()
Combo1.AddItem "家庭成员"
Combo1.AddItem "地址"
Combo1.AddItem "邮编"
Combo1.ItemData(0) = 1
Combo1.ItemData(1) = 2
Combo1.ItemData(2) = 3
Arr(1, 1) = "父亲"
Arr(1, 2) = "母亲"
Arr(1, 3) = "哥哥"
Arr(1, 4) = "姐姐"
Arr(1, 5) = "妹妹"
Arr(2, 1) = "大连"
Arr(2, 2) = "山海"
Arr(2, 3) = "山东"
Arr(2, 4) = "北京"
Arr(2, 5) = "合肥"
Arr(3, 1) = "100000"
Arr(3, 2) = "200000"
Arr(3, 3) = "300000"
Arr(3, 4) = "400000"
Arr(3, 5) = "500000"
End Sub
'按回车选择
Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = Asc(vbCrLf) Then
If Combo1.ListCount > 0 Then
For i = 1 To Combo1.ListCount
If Trim(Text1.Text) = Combo1.List(i - 1) Then
Tmp = Combo1.ItemData(i - 1)
Exit For
End If
Next
End If
Combo1.Clear
Combo1.AddItem Arr(Tmp, 1), 0
Combo1.AddItem Arr(Tmp, 2), 1
Combo1.AddItem Arr(Tmp, 3), 2
Combo1.AddItem Arr(Tmp, 4), 3
Combo1.AddItem Arr(Tmp, 5), 4
'自动下拉 Combo1
Dim nret As Long
nret = SendMessage(Combo1.hwnd, CB_SHOWDROPDOWN, 1, ByVal 0&)