当组合框有焦点时显示下拉列表

Posted

技术标签:

【中文标题】当组合框有焦点时显示下拉列表【英文标题】:Show dropdown list when combobox has focus 【发布时间】:2019-01-01 18:07:26 【问题描述】:

是否可以在 Access 表单上放置一段代码,当表单上的任何组合框具有焦点时,它会自动显示下拉列表?

我知道只要组合框有焦点,我就可以使用下面的事件自动显示下拉列表。但是,如果可能的话,我宁愿不必将那行代码放在每个组合框上,因为我有这么多。

Private Sub combobox_GotFocus()
    'When the combobox receives focus
    'display in drop down position
    Me.combobox.Dropdown
End Sub

我的数据库中有几十个表格,每个表格上有几十个组合框。

【问题讨论】:

不,没有“单一代码”可以为所有组合框完成此操作。每个人都需要事件代码。 很抱歉反对,但您可以 Creating a Class to Handle Access Form Control Events的可能重复 对不起@Storax,但我不是一个很好的 VBA,我查看了提供的链接,但我不完全确定从哪里开始。 【参考方案1】:

创建一个名为 cComboBox 的类

Option Compare Database
Option Explicit

Private WithEvents mComboBox As Access.ComboBox

Private Sub mComboBox_GotFocus()
    mComboBox.Dropdown
End Sub

Public Function AddCtl(nCtl As Access.ComboBox) As Access.ComboBox
    Set mComboBox = nCtl
    mComboBox.OnGotFocus = "[Event Procedure]"
    'mComboBox.OnChange = "[Event Procedure]"
    Set AddCtl = mComboBox
End Function

并将以下代码添加到您的表单中

Option Compare Database
Option Explicit

Dim myCBs As New Collection

Private Sub Form_Load()
Dim myCB As cComboBox

Dim ctl As Access.Control
    For Each ctl In Me.Controls
        If TypeName(ctl) = "ComboBox" Then
            Set myCB = New cComboBox
            myCB.AddCtl ctl
            myCBs.Add myCB
        End If
    Next

End Sub

【讨论】:

非常感谢!效果很好,为我节省了大量时间! @Storax;你能解释一下cComboBox类中Function AddCtl()Set AddCtl = mComboBox这行的用途吗? @Gene:完全没有目的,我只是从上面的链接中复制并修改了代码。因此,最好改用 Set 属性。另一方面,它不会造成任何真正的伤害。 @Storax;不,不是那样...我只是认为根本不需要它,因为无论如何函数的返回都没有用:无论是否分配了AddCtl,都无关紧要。 @Gene:对,你可以完全删除Set AddCtl = mComboBox这一行,一切都会正常进行。

以上是关于当组合框有焦点时显示下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

从下拉列表中选择任何值时显示 3 个按钮 [重复]

WIN32 API C 程序:尽管使用 CB_ADDSTRING 填充,组合框有一个空列表或不下拉

如何在选择下拉选项时显示div

仅使用 CSS 在悬停时显示下拉菜单并在单击时关闭

悬停时显示/隐藏下拉菜单 Flutter for web

DatePicker 不设置年份,除非当原始年份超出下拉范围时显式更改下拉列表