【问题标题】:How to pass a form as a parameter with events如何将表单作为事件的参数传递
【发布时间】:2020-07-27 23:32:35
【问题描述】:

我的函数当前接受一个表单并将其保存到一个变量中,以便在此模块中捕获表单的事件。事实是,表单是强类型的——每个表单都需要自己的功能。这是很多重复的代码,所以我尝试通过将变量输入为Access.Form 来使其通用,但事件停止触发。

我认为这可能是因为现在表单仅在运行时定义。不管是什么原因,有谁知道是否可以匿名传递表单而不会丢失其事件?

当前代码

Private WithEvents frm As [Form_Create]

Public Sub Run(parentForm As [Form_Create])
    Set model = New mdlKita
    Set frm = parentForm
End Sub

// then I can do things like
Public Sub frm_OnCreate()

当前代码已更新为通用代码 - 事件不会触发

Private WithEvents frm As Access.Form

Public Sub Run(parentForm As Access.Form)
    Set model = New mdlKita
    Set frm = parentForm
End Sub

// this never fires
Public Sub frm_OnCreate()

在表格内以防有人感兴趣

Private ctrl As ctrCreate

Private Sub btnContinue_Click()
    Set ctrl = New ctrCreate
    ctrl.Run Me
    RaiseEvent OnCreate
End Sub

【问题讨论】:

    标签: vba forms ms-access events


    【解决方案1】:

    我猜你错过了 InitializeTerminate 辅助类 - 这里是文本框:

    Option Explicit
    
    ' Helper class for form Palette for event handling of textboxes.
    ' 2017-04-19. Gustav Brock, Cactus Data ApS, CPH.
    ' Version 1.0.0
    ' License: MIT.
    
    ' *
    
    Private Const EventProcedure    As String = "[Event Procedure]"
    
    Private WithEvents ClassTextBox As Access.TextBox
    
    
    Public Sub Initialize(ByRef TextBox As Access.TextBox)
    
        Set ClassTextBox = TextBox
        
        ClassTextBox.OnClick = EventProcedure
        
    End Sub
    
    
    Public Sub Terminate()
    
        Set ClassTextBox = Nothing
    
    End Sub
    
    
    Private Sub ClassTextBox_Click()
    
        ' Select full content.
        ClassTextBox.SelStart = 0
        ClassTextBox.SelLength = Len(ClassTextBox.Value)
        ' Display the clicked value.
        ClassTextBox.Parent!CopyClicked.Value = ClassTextBox.Value
        ' Copy the clicked value to the clipboard.
        DoCmd.RunCommand acCmdCopy
    
    End Sub
    

    【讨论】:

    • Private Const EventProcedure As String = "[Event Procedure]" 是做什么的?
    • 它将控件标记为具有 OnClick 事件,该事件将为[Event Procedure](否则您必须在属性表中手动预设)。该过程将被列为ClassTextBox_Click()
    猜你喜欢
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-04
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多