关于MASKEDBOX的很郁闷的问题 DX 救命

Eyestouch 2003-08-22 03:50:58
用一个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
...全文
57 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eyestouch 2003-08-24
  • 打赏
  • 举报
回复
救~~ ...
Eyestouch 2003-08-23
  • 打赏
  • 举报
回复
DX 我顶

7,759

社区成员

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

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