You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:40:23