高手们都进来关注一下!解决立即给分。

Do_Better 2002-04-03 04:34:21
如何在文本框中实现类似IE地址栏,在输入时出现下拉选择框?最好是定制的项目。
比如我这个文本框的项目是家庭成员,在输入时立即弹出“父亲,母亲,姐姐”等选项。
就象用VB编程时,在点之后可以选择属性,方法。
高手们请给个例子,思路也可!
...全文
97 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
roking 2002-04-03
  • 打赏
  • 举报
回复
实例源码(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

'========================================
'OK!
'具有类似IE地址栏的动态查询效果,同时组何框也可单用
'改进意见:考虑方向键的作用(类似IE地址栏)
iwillgo2 2002-04-03
  • 打赏
  • 举报
回复
和上面那位仁兄说的建立一张表,再用一个listbox控件,visible=false
在text1的change事件里调整listbox的位置,并让listbox可见。
ERR 2002-04-03
  • 打赏
  • 举报
回复
建一张表,(ID, Name, Terms)
然后在Name 中输入将要显示的内容,Terms 中输入各种可供筛选的字符。
ID Name Terms
如 1 父亲 家庭成员称呼男性

然后
"SELECT Name FROM MyTable WHERE Terms LIKE '%" & Text1 & "%'"
出来的记录赋给一个listbox 就可以了
sbm 2002-04-03
  • 打赏
  • 举报
回复
agree ch21st(风尘鸟)
heyijpn 2002-04-03
  • 打赏
  • 举报
回复
用一个listbox ,用ADO用模糊查询把和text中的查询显示在listbox中
同时在listbox 中加入对click,keypress事件的相应处理,即可。
jyd30 2002-04-03
  • 打赏
  • 举报
回复
agree
道素 2002-04-03
  • 打赏
  • 举报
回复
你实现放置一个combox,隐藏,当调用text的click事件时将combox移动到text上,显示,在把combox的数据传给text
zyl910 2002-04-03
  • 打赏
  • 举报
回复
看看这个:
http://www.csdn.net/expert/topic/519/519029.xml?temp=4.517764E-02
Do_Better 2002-04-03
  • 打赏
  • 举报
回复
为什么说“贴子回复次数大于跟给分次数 ”,没法给大家给分
Do_Better 2002-04-03
  • 打赏
  • 举报
回复
为什么说“贴子回复次数大于跟给分次数 ”,没法给大家给分
Do_Better 2002-04-03
  • 打赏
  • 举报
回复
谢谢各位支持,给我很大的启发,结帖
gxingmin 2002-04-03
  • 打赏
  • 举报
回复
做个OCX控件试试
vivan19781111 2002-04-03
  • 打赏
  • 举报
回复
上面写的有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 Sub

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"

' 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
vivan19781111 2002-04-03
  • 打赏
  • 举报
回复
添加一个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
bestofbest 2002-04-03
  • 打赏
  • 举报
回复
不错啊,有头脑!

7,786

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧