防止向下箭头或向上箭头更新 MS Access 中的组合框

Posted

技术标签:

【中文标题】防止向下箭头或向上箭头更新 MS Access 中的组合框【英文标题】:Prevent down arrow or up arrow from updating a combo box in MS Access 【发布时间】:2017-06-15 21:46:16 【问题描述】:

通常当用户在组合框下拉菜单中看到搜索字符串结果时,自然的反应是向下箭头指向他们确定的结果。

但是,如果我的用户单击向下箭头,它将更新组合框,从而不会按预期跳转到记录。我想限制组合框仅在用户点击“Tab”、“Enter”或鼠标点击时才感知更新。

我编写的组合框搜索可以正常工作。

这是我在 On Key Up 事件中的代码

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  

【问题讨论】:

我想我知道你在说什么,但有点不清楚你所说的“更新”是什么意思。 “如果我的用户单击向下箭头,它将更新组合框,”“限制组合框以仅感知更新......”。 cbo 每次击键都会更新,不是吗? “Tab”、“Enter”或鼠标点击会发生什么? 为了澄清,我指的是会导致组合框“失去焦点”的击键。一旦失去焦点,组合框就被认为已更新。这反过来会触发 AfterUpdate 事件。当用户在“按键事件”中键入时,组合框还没有确定。但是当用户单击向下箭头(或输入或制表符,或单击鼠标)时,组合框 IS 被认为已更新,因为它失去了组合框的焦点。当用户使用向上或向下键进行扫描时,必须有一种方法来阻止向下箭头键或向上箭头键导致 AfterUpdate 事件触发。 【参考方案1】:

我认为您正在寻找这样的东西:

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

【讨论】:

38 是向上箭头,40 是向下箭头。 msdn.microsoft.com/en-us/library/… 没错。非常感谢你。我添加了我的实现方式。 有一个小故障。我昨天没注意到。用户选择一个值后,它会触发 AfterUpdate,但组合框保持下拉状态。我显然需要将 Enter、Tab 或鼠标单击隔离为触发 AfterUpdate 并关闭下拉列表的唯一键。不知道如何关闭它。我假设触发 AfterUpdate 会关闭下拉菜单。 好的,所以最终答案现在显示在“这是我实现 WAZZ 答案的方式。我添加了“案例 1、9、13”,这有效地确保了 Key Up 事件在用户单击鼠标 (1)、Tab (9) 或 Enter (13)。Wazz 最初在他的 cmets 中说“试试这个”。事实证明两者都是必要的,但在不同的情况下。【参考方案2】:

这是我实现 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

【讨论】:

以上是关于防止向下箭头或向上箭头更新 MS Access 中的组合框的主要内容,如果未能解决你的问题,请参考以下文章

JQuery:Keyup,如何防止箭头(向上和向下)的默认行为并输入键?

Chrome 32 更新中缺少向上/向下滚动条箭头按钮

在目标 c 的 UITableView 中显示指示用户向上或向下滚动的箭头

向上和向下的箭头怎么输入?

使用纯 CSS 创建向上和向下箭头图标或按钮

当我在选择上使用向上或向下箭头时,为啥 jquery 更改事件不触发?