我在您输入组合框时构建搜索。搜索和更新使用change事件。
Private Sub ItemName_Change()
Dim strText, strFind, strSQL, strSelect, strWhere, strOrderBy As String
strText = Me.ItemName.Text
strSelect = "SELECT DISTINCT [ItemName] FROM ItemsMaster "
strWhere = "WHERE type = 'Sold Goods' "
strOrderBy = " ORDER BY [ItemName];"
If (Len(Trim(strText)) > 0) Then
'Show the list with only those items containing the types letters
strFind = "ItemsMaster.ItemName Like '"
For i = 1 To Len(Trim(strText))
If (Right(strFind, 1) = "*") Then
strFind = Left(strFind, Len(strFind) - 1)
End If
strFind = strFind & "*" & Mid(strText, i, 1) & "*"
Next
strFind = strFind & "'"
strSQL = strSelect & strWhere & "AND " & strFind & strOrderBy
Me.ItemName.RowSource = strSQL
Else
strSQL = strSelect & strWhere & strOrderBy
Me.ItemName.RowSource = strSQL
End If
Me.ItemName.Dropdown
End Sub
但是当我尝试从下拉列表中选择项目时,它会更新文本并触发更改事件。 有没有办法用户可以滚动列表而不用组合框更改文本框中的文本?
答案 0 :(得分:1)
你可以通过在事件处理程序开始时测试listindex是否大于-1来解决这个问题,如果是,则退出,例如:
Private Sub ItemName_Change()
If ItemName.ListIndex > -1 Then
Exit sub
End if
...
End Sub
我认为尽管你最好不使用组合框,但最好用(a)文本框(文本输入到其中,以及哪些文本框)模仿它的功能性你写的改变事件)& (b)一个列表框,显示搜索结果 - 然后当用户选择一个项目时,此操作将与条目控件取消关联。