2017-06-15 146 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