【发布时间】:2022-12-20 17:45:59
【问题描述】:
我正在尝试创建一个自定义类来处理所有组合框的事件,但我也希望组合框运行它们自己的事件处理程序。为此,我创建了一个新的自定义类,将所需的事件处理程序添加到自定义类中,并将我所有的组合框初始化到这个自定义类中。然后我将所有这些新的自定义对象存储在一个集合中。这很好用。每当组合框更新时,它都会运行自己的 OnUpdate 事件处理程序,然后是自定义类 OnUpdate 事件处理程序。
问题是一旦发生未处理的错误,集合就会被删除,这也意味着每个组合框不再是自定义类的成员。这意味着任何时候发生未处理的错误并且用户继续使用该应用程序时,只有组合框的处理程序运行。
即使在发生未处理的错误后,是否有办法存储这些对象引用?据我了解,我不能使用 tempvars,因为它只存储值而不是对象引用。
我的自定义类中的代码:
Option Compare Database
Private WithEvents mCmbo As ComboBox
Public Property Get Combo() As ComboBox
Set Combo = mCmbo
End Property
Public Property Set Combo(ByVal TheCombo As ComboBox)
Set mCmbo = TheCombo
End Property
Public Sub Initialize(TheCombo As ComboBox)
Set Me.Combo = TheCombo
Me.Combo.OnEnter = "[Event Procedure]"
Me.Combo.BeforeUpdate = "[Event Procedure]"
Me.Combo.AfterUpdate = "[Event Procedure]"
End Sub
'------------------------------------------------------ Trap Events --------------------------------------
Private Sub mCmbo_BeforeUpdate(Cancel As Integer)
MsgBox "Before update Trapped in custom class "
End Sub
Private Sub mCmbo_AfterUpdate()
MsgBox "After update Trapped in custom class."
End Sub
用于将我的组合框初始化到这个自定义类中的代码:
Private Sub Form_Load()
Dim ctrl As Control
'Assigning the custom class to the combo box
For Each ctrl In Forms!Form1.Controls
If ctrl.ControlType = acComboBox Then
Debug.Print ctrl.Name
Set CC = New TestClass
CC.Initialize ctrl
ccCollection.Add CC
End If
Next ctrl
End Sub
Private Sub Combo4_AfterUpdate()
MsgBox "Combo update event"
End Sub
Private Sub Combo4_BeforeUpdate(Cancel As Integer)
MsgBox "Combo BeforeUpdate event"
End Sub
我研究过 tempvars、数据库属性和隐藏形式,但我相信这些都不能存储对象变量。
【问题讨论】:
标签: vba event-handling ms-access-2007