建一张表,(ID, Name, Terms) 然后在Name 中输入将要显示的内容,Terms 中输入各种可供筛选的字符。 ID Name Terms 如 1 父亲 家庭成员称呼男性然后 "SELECT Name FROM MyTable WHERE Terms LIKE '%" & Text1 & "%'" 出来的记录赋给一个listbox 就可以了
实例源码(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 SubPrivate 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 SubPrivate Sub Combo1_LostFocus() List1.Visible = False End SubPrivate 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 SubPrivate Sub List1_Click() If List1.Visible = True Then Combo1.Text = List1.List(List1.ListIndex) List1.Visible = False End If End Sub'======================================== 'OK! '具有类似IE地址栏的动态查询效果,同时组何框也可单用 '改进意见:考虑方向键的作用(类似IE地址栏)
添加一个ComboBox,一个Textbox控件''以下声明用于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&) End If
End Sub
上面写的有Bug,以下改正如果有Bug,请提出来,谢谢!''以下声明用于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 SubPrivate 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"
' 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 End If
同时在listbox 中加入对click,keypress事件的相应处理,即可。
然后在Name 中输入将要显示的内容,Terms 中输入各种可供筛选的字符。
ID Name Terms
如 1 父亲 家庭成员称呼男性然后
"SELECT Name FROM MyTable WHERE Terms LIKE '%" & Text1 & "%'"
出来的记录赋给一个listbox 就可以了
在text1的change事件里调整listbox的位置,并让listbox可见。
步骤
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 SubPrivate 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 SubPrivate Sub Combo1_LostFocus()
List1.Visible = False
End SubPrivate 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 SubPrivate Sub List1_Click()
If List1.Visible = True Then
Combo1.Text = List1.List(List1.ListIndex)
List1.Visible = False
End If
End Sub'========================================
'OK!
'具有类似IE地址栏的动态查询效果,同时组何框也可单用
'改进意见:考虑方向键的作用(类似IE地址栏)
'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&) End If
End Sub
'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 SubPrivate 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"
' 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 End If
End If
End Sub