我有一个带有寄存器和几个子表单的主表单。我正在使用类模块,并在其中保存表单的名称,以便轻松访问它们。访问类的相应变量保存在模块中,并以表单(clsMod)设置(新)on_load。在第一次访问之前,我的主窗体调用一个函数来“初始化”类模块(initial_form)中的值,以使它们可访问。到目前为止,这就像一个魅力。
但是当我现在尝试访问该值时,f.e。使用clsMod.detailsControl或clsMod.detailsControl!fieldXy我的类模块再次初始化,从而丢失所有绑定的对象。我想我不允许这样使用控件/表格?没有错误,当然除了'对象变量,或者没有设置块变量',之后会发生。
Private m_ctldetailsControl As control
Public Sub initial_form()
Set detailsControl = Forms!mainForm_ufoMainForm
End Sub
Public Property Get detailsControl() As control
Set detailsControl = m_ctldetailsControl
End Property
Public Property Set detailsControl(ctlDetailsControl As control)
Set m_ctldetailsControl = ctlDetailsControl
End Property
我把它缩小到这样一个事实,即当我从'outside'访问控制对象时,类模块再次被初始化(我在Class_Initialize()中放了一个时间戳,并且可以看到何时有新的初始化),我只是不知道为什么。当我使用Form-Objects而不是Control-Objects时也会发生同样的情况。
我可以消除我的代码重置类模块,因为它只在加载过程中设置一次(设置clsMod = new clsModification)。该类中的其他所有内容都可以正常工作,我可以从类内部访问该属性,而无需重新初始化。
任何有关此主题的想法或进一步阅读都将非常感激,因为任何其他细节只是问!
一些补充:
答案 0 :(得分:2)
我猜测罪魁祸首就是你声明了这个类模块As New
的一个实例。我显然不知道你的代码的其余部分是什么样的,但我想整个过程都是这样的:
As New
(即Dim clsMod As New initial_form
)。clsMod
)时运行Class_Initialize()过程。clsMod
)超出范围。 clsMod
)。clsMod
)时运行Class_Terminate()过程。clsMod
。该变量是Nothing因为GC清理了它。但是,您声明了As New
,因此创建了initial_form
的全新实例并将其分配给对象变量clsMod
。 没有看到你的其余代码,我不能肯定这是问题所在。但根据你发布的症状,这可以解释这种行为。