2017-06-15 141 views
0

通常,當用戶從搜索字符串中看到結果時,會出現組合框下拉菜單,自然的響應是向下箭頭以找到它們精確定位的結果。防止向下箭頭或向上箭頭更新MS Access中的組合框

但是,如果我的用戶單擊向下箭頭,它將更新組合框,從而不會按預期跳轉到記錄。我想限制組合框僅在用戶點擊「Tab」,「Enter」或鼠標單擊時才檢測更新。

我寫的組合框搜索功能完美無缺。

這是我在On鍵,向上事件

Private Sub cboGCPC_Search_KeyUp(KeyCode As Integer, Shift As Integer) 
    Dim strSQL As String 

     strSQL = "SELECT * " _ 
       & "FROM qryGCPC_Search " _ 
       & "WHERE [DocumentNumber] Like '*" & Me.cboGCPC_Search.text & "*' OR [Description] Like '*" & Me.cboGCPC_Search.text & "*' OR [Vendor] Like '*" & Me.cboGCPC_Search.text & "*' OR [Receiver] Like '*" & Me.cboGCPC_Search.text & "*';" 


Debug.Print strSQL 

     Me.cboGCPC_Search.RowSource = strSQL 
     Me.cboGCPC_Search.Dropdown 

End Sub 
+0

我想我知道你在做什麼,但有點不清楚你的意思是'更新'。 「如果我的用戶點擊向下箭頭,它會更新組合框,」「限制組合框只感知更新......」。 cbo正在更新每個擊鍵是不是? 「Tab」,「Enter」或鼠標點擊會發生什麼? – wazz

+0

爲了澄清,我指的是會導致組合框「失去焦點」的擊鍵。一旦焦點丟失,組合框被視爲更新。這又會觸發AfterUpdate事件。當用戶輸入「關鍵事件」時,組合框還沒有成熟。但是,當用戶單擊向下箭頭(或輸入或選項卡,或單擊鼠標)組合框* IS *被認爲已更新,因爲它失去了組合框的焦點。必須有一種方法來捕獲向下箭頭鍵或向上箭頭鍵,以便在用戶使用向上或向下鍵進行掃描時觸發AfterUpdate事件。 – monty327

回答

0

我認爲你在尋找這樣的事情代碼:

Private Sub cboGCPC_Search_KeyUp(KeyCode As Integer, Shift As Integer) 
    If KeyCode = 38 Then 
     KeyCode = 0 
     'Me.Combo0.Dropdown 'try this too, if necessary. 
     'Exit Sub   'try this too, if necessary. 
    End If 
    If KeyCode = 40 Then 
     KeyCode = 0 
     'Me.Combo0.Dropdown 'try this too, if necessary. 
     'Exit Sub   'try this too, if necessary. 
    End If 
End Sub 
+0

38是向上箭頭,40是向下箭頭。 https://msdn.microsoft.com/en-us/library/aa243025%28v=vs.60%29.aspx?f=255&MSPPError=-2147217396 – wazz

+0

準確地說。非常感謝你。我添加了我如何實現它。 – monty327

+0

有一個小故障。我昨天沒注意到它。用戶選擇一個值後,會觸發AfterUpdate,但組合框保持下降狀態。我顯然需要隔離輸入,製表符或鼠標點擊是觸發AfterUpdate並關閉下拉列表的唯一鍵。不知道如何關閉它。我假設發射AfterUpdate關閉下拉菜單。 – monty327

0

這是我實現WAZZ的答案的完整方法。

Private Sub cboGCPC_Search_KeyUp(KeyCode As Integer, Shift As Integer) 
    Dim strSQL As String 

     strSQL = "SELECT * " _ 
       & "FROM qryGCPC_Search " _ 
       & "WHERE [DocumentNumber] Like '*" & Me.cboGCPC_Search.text & "*' OR [Description] Like '*" & Me.cboGCPC_Search.text & "*' OR [Vendor] Like '*" & Me.cboGCPC_Search.text & "*' OR [Receiver] Like '*" & Me.cboGCPC_Search.text & "*';" 


    Debug.Print strSQL 


     Select Case KeyCode 

     Case 38, 40 

      KeyCode = 0 

    Case 1, 9, 13 
      Exit Sub 

     Case Else 
      Me.cboGCPC_Search.RowSource = strSQL 
      Me.cboGCPC_Search.Dropdown 

     End Select 


End Sub