当组合框有焦点时显示下拉列表
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
这一行,一切都会正常进行。以上是关于当组合框有焦点时显示下拉列表的主要内容,如果未能解决你的问题,请参考以下文章