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

解决方案 »

  1.   

    GetCboListIndex = SendMessage(cbo.hwnd, l_lngFindExact, -1, ByVal strkey)
      

  2.   

    '----------------------------------------------------------------------------
    '
    '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 SubPrivate Sub Form_Load()
        
        Combo1.AddItem "abc"
        Combo1.AddItem "baby"
        Combo1.AddItem "bike"
        Combo1.AddItem "boy"
        Combo1.AddItem "box"
    End Sub
      

  3.   


    '----------------------------------------------------------------------------
    '
    '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 LongConst 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
      

  4.   

    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事件中调用这个过程