如何在Combox中自動找到對應的選項?

adacqx 2003-09-12 05:03:39
如何在Combox中自動找到對應的選項?
...全文
32 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
didishu0807 2003-09-12
  • 打赏
  • 举报
回复
Global Const DISABLE_COLOR = &H80000000
Global Const ENABLE_COLOR = &H80000005
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 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
然后在你的combobox_change事件中调用这个过程
lihonggen0 2003-09-12
  • 打赏
  • 举报
回复

'----------------------------------------------------------------------------
'
'Author:lihonggen0
'Date:2003-6-19
'功能:listbox 模糊查询
'----------------------------------------------------------------------------

Option Explicit

'申明API函数
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long

Const LB_FINDSTRING = &H18F '常数

Private Sub Form_Load()

Text1 = "" '令文本框为空
List1.AddItem "abc"
List1.AddItem "bike"
List1.AddItem "baby"
List1.AddItem "boy"
List1.AddItem "box"
End Sub


Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
Dim intLong As Integer
If KeyCode = vbKeyBack Then Exit Sub

List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Text1.Text))
intLong = Len(Text1.Text)
Text1.Text = List1.Text
Text1.SelStart = intLong
Text1.SelLength = Abs(Len(Text1.Text) - intLong)

End Sub
lihonggen0 2003-09-12
  • 打赏
  • 举报
回复
'----------------------------------------------------------------------------
'
'Author:lihonggen0
'Date:2003-6-19
'功能: Combo 模糊查询
'----------------------------------------------------------------------------


'申明API函数
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Private Const WM_SETREDRAW As Long = &HB&
Private Const CB_FINDSTRING As Long = &H14C&
Public Sub SearchCombo(InControl As Object)
On Error GoTo trap

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
trap:
MsgBox Err.Description
End Sub


Private Sub Combo1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyBack Then Exit Sub
Call SearchCombo(Combo1)
End Sub

Private Sub Form_Load()

Combo1.AddItem "abc"
Combo1.AddItem "baby"
Combo1.AddItem "bike"
Combo1.AddItem "boy"
Combo1.AddItem "box"
End Sub
TaoHuang 2003-09-12
  • 打赏
  • 举报
回复
GetCboListIndex = SendMessage(cbo.hwnd, l_lngFindExact, -1, ByVal strkey)

7,759

社区成员

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

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