2016-07-20 59 views
2

我在鍵入組合框時正在構建搜索。搜索和更新使用更改事件。防止組合框選擇更改文本

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)一個列表框(b)一個列表框,它顯示搜索結果 - 然後當用戶選擇一個項目時,該操作與輸入控件分離。