要实现的效果如下:
例如在下拉列表框中有如下内容:
001222
002333
003444
012000
013555
当你在下拉列表框中输入“012”时,它能自动定位到“012000”
怎么实现

解决方案 »

  1.   

    这个比较难办,如果你的下拉记录是一个记录集的话,我建议你用:textbox+commandbox+datagrid三个控件做成一个下拉选择控件。做法:单击commandbox,弹出datagrid,里面的内容可在下拉时动态将记录集赋给datagrid,然后将焦点放在textbox,输入你筛选的数,用filter筛选记录集的记录,得到筛选出来的数会自动定位到那一条,你可按回车选择这条记录。这个我经常用于显示两个字段(如果编号、名称)然后选择的例子,肯定成功的,你做一下啦。^_^
      

  2.   


    发送LB_FINDSTRING消息即可Option ExplicitPrivate Declare Function SendMessageFind Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As String) As Long
    Const WM_USER = &H400
    Const LB_ERR = (-1)
    Const LB_FINDSTRING = &H18FPrivate Sub Form_Load()
    List1.AddItem "Item #1"
    List1.AddItem "Item #2"
    List1.AddItem "Item #3"
    List1.AddItem "Item #4"
    End SubPrivate Sub Command1_Click()
    CheckForDupes
    End SubSub CheckForDupes()
    Dim Ret As Long
    Dim A As String
    A = Text1.Text
    Ret = SendMessageFind(List1.hwnd, LB_FINDSTRING, 0, (A))
    If Ret = LB_ERR Then
    List1.AddItem Text1.Text
    Else
    List1.ListIndex = Ret
    'MsgBox " 重 复 项 目 - 不 能 被 添加 到 列 表 框 中", 16, " 错 误"
    End If
    End Sub
    Private Sub Text1_Change()
    CheckForDupes
    End Sub
      

  3.   

    huangjianyou(小健) 能否发点代码借我参考一下
      

  4.   

    可以实现,但有个问题,就是list1的第一项没有这选到,
    就是当你输入I的时候,
    是选中第二项,而不是第一项
      

  5.   

    Ret = SendMessageFind(List1.hwnd, LB_FINDSTRING, -1, (A))
      

  6.   

    这样看看Dim CmbCtrl As BooleanPrivate Sub Combo1_Change()
        If CmbCtrl Then Exit Sub
        Dim i As Long, d As Long
        With Combo1
            d = Len(.Text)
            For i = 0 To .ListCount - 1
                If .Text = Left(.List(i), Len(.Text)) Then
                    CmbCtrl = True
                    .ListIndex = i
                    .SelStart = d
                    .SelLength = Len(.List(i))
                    Exit For
                End If
            Next i
        End With
        CmbCtrl = False
    End SubPrivate Sub Combo1_KeyDown(KeyCode As Integer, Shift As Integer)
        CmbCtrl = True
        With Combo1
            If KeyCode = 46 Then .Text = ""
            If KeyCode = 8 Then
                KeyCode = 0: CmbCtrl = False
                Dim tmp As Long
                tmp = Len(.Text) - Len(.SelText)
                .Text = Left(.Text, IIf(tmp, tmp - 1, tmp))
            End If
        End With
        CmbCtrl = False
    End Sub