防止组合框选择更改文本

时间:2016-07-20 16:46:48

标签: vba access-vba

我在您输入组合框时构建搜索。搜索和更新使用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

但是当我尝试从下拉列表中选择项目时,它会更新文本并触发更改事件。 有没有办法用户可以滚动列表而不用组合框更改文本框中的文本?

1 个答案:

答案 0 :(得分:1)

你可以通过在事件处理程序开始时测试listindex是否大于-1来解决这个问题,如果是,则退出,例如:

Private Sub ItemName_Change()
    If ItemName.ListIndex > -1 Then
        Exit sub
    End if

    ...
End Sub

我认为尽管你最好不使用组合框,但最好用(a)文本框(文本输入到其中,以及哪些文本框)模仿它的功能性你写的改变事件)& (b)一个列表框,显示搜索结果 - 然后当用户选择一个项目时,此操作将与条目控件取消关联。