关于MASKEDBOX的很郁闷的问题 DX 救命
用一个MASKEDBOX和一个LISTBOX控件,在Maskedbox输入字符,就会自动在Listbox里查找匹配的项,并且匹配项里,不是用户输入的字符要呈现被选中的状态。例如Listbox 有三个项 “长期”、“长长期”、“长长长期”三个项。只要在Maskedbox里输入一个“长”,就能自动在Listbox里查找到“长期”,并把“长期”放到Maskedbox里,而且“期”要被选中。
我碰到的麻烦就是 匹配项里不是用户输入的字符 没能被选中。可是以下这段代码把控件换成Textbox运行是没有问题的。救命啊 DX
Option 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 Boolean
Private 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