发送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
Ret = SendMessageFind(List1.hwnd, LB_FINDSTRING, -1, (A))
这样看看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
发送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
就是当你输入I的时候,
是选中第二项,而不是第一项
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