用一个MASKEDBOX和一个LISTBOX控件,在Maskedbox输入字符,就会自动在Listbox里查找匹配的项,并且匹配项里,不是用户输入的字符要呈现被选中的状态。例如Listbox 有三个项  “长期”、“长长期”、“长长长期”三个项。只要在Maskedbox里输入一个“长”,就能自动在Listbox里查找到“长期”,并把“长期”放到Maskedbox里,而且“期”要被选中。我碰到的麻烦就是  匹配项里不是用户输入的字符 没能被选中。可是以下这段代码把控件换成Textbox运行是没有问题的。救命啊 DXOption Explicit
'Windows declarations
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
Private Const LB_FINDSTRING = &H18F
Private Const LB_ERR = (-1)'Private flag
Private blnEditMsked As BooleanPrivate Sub Form_Load()
    List1.AddItem "长期"
    List1.AddItem "短期"
    List1.AddItem "永久"
End Sub'在list1列表中查找匹配字串
Private Sub MaskEdBox1_Change()
    Dim i As Long, j As Long
    Dim strPartial As String, strTotal As String
    '检测delete、backspace屏蔽过程
    If blnEditMsked Then
        blnEditMsked = False
        Exit Sub
    End If
    '查找
    With MaskEdBox1
        strPartial = .Text
        i = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal strPartial)
        If i <> LB_ERR Then
            strTotal = List1.List(i)
            j = Len(strTotal) - Len(strPartial)
            If j > 0 Then
                blnEditMsked = True
                .SelStart = Len(strPartial)
                .SelText = Right$(strTotal, j)
                .SelLength = j
            'Else
            End If
        End If
    End With
End Sub'检测delete、backspace设置blnEditMsk
Private Sub MaskEdBox1_KeyDown(KeyCode As Integer, Shift As Integer)
    Dim i As Long
    Select Case KeyCode
        Case vbKeyDelete
            blnEditMsked = True
        Case vbKeyBack
            blnEditMsked = True
    End Select
End Sub