MS Access自定义类中实例化frmVisibleForm表单无响应问题求助
Access自定义类实例化表单无响应问题修复
核心问题
- 自定义类中的
InstantiateForm是私有方法,测试模块创建类实例后未触发该方法,表单从未被实例化 - 测试函数执行完毕后,类实例
mbox会立即超出作用域被销毁,即便调用了方法,表单也会随之关闭
修复后的自定义类模块 clsMBox
Option Compare Database Option Explicit Dim WithEvents cls_frmVisibleForm As Form_frmVisibleForm ' 改为Public方法,允许外部调用触发表单实例化 Public Sub InstantiateForm() Set cls_frmVisibleForm = New Form_frmVisibleForm With cls_frmVisibleForm .Modal = True .Visible = False ' 符合预期流程:先实例化但不可见 ' 此处可添加其他属性设置逻辑 .Visible = True ' 设置表单可见 ' 模态表单设置Visible后会自动获取焦点,SetFocus可省略;若需确保焦点,可在表单Activate事件中处理 End With End Sub ' 示例:绑定表单自定义事件的处理逻辑(后续添加事件触发代码后生效) Private Sub cls_frmVisibleForm_DataInput(InputValue As String) MsgBox "收到输入值:" & InputValue End Sub
修复后的测试模块 mdlTestMBox
Option Compare Database Option Explicit Public Function ClassTest() Dim mbox As clsMBox Set mbox = New clsMBox ' 调用类中的表单实例化方法 mbox.InstantiateForm ' 可选:添加DoEvents确保表单稳定显示,避免函数结束后类实例立即销毁 DoEvents End Function
额外补充(表单事件触发)
若要让frmVisibleForm的DataInput事件生效,需在表单中添加触发代码,比如在提交按钮点击时:
' 在frmVisibleForm模块中添加 Private Sub cmdSubmit_Click() RaiseEvent DataInput(Me.txtInput.Value) ' 假设存在输入框txtInput End Sub
内容的提问来源于stack exchange,提问作者PATA
相关产品推荐
相关产品推荐

