1

是否有可能在仍处于父表单中时检测到子表单执行的插入操作?

澄清一下:我有一系列用于数据输入的表格,它们每个都有一个用于向相应表格添加条目的按钮(使用表格中提供的数据)。我正在尝试将它们中的每一个依次设置为“向导”父表单中的子表单,该父表单将循环遍历所有数据输入表单。

在表单之间切换时出现了我的问题,因为很明显,这个父表单中的 AfterInsert 事件没有检测到由子表单中包含的表单触发的插入。我知道我可以将插入的触发器移动到父表单中的按钮;但是,据我所知,这需要将数据输入表单中每个按钮的单击事件代码设置为公开,以便可以从父表单的代码中调用它们。我对此持怀疑态度,因此希望有其他选择。

4

1 回答 1

1

在父窗体中创建一个公共过程。

Public Sub Listener(ByVal pMsg As String)
    MsgBox pMsg
End Sub

然后,在您的每个子窗体中,从 After Insert 调用该过程。

Private Sub Form_AfterInsert()
    Dim strMsg As String
    strMsg = Me.Name & " inserted row."
    Call Me.Parent.Listener(strMsg)
End Sub

如果子表单也可以单独使用(没有父表单),Me.Parent将抛出错误 #2452,“您输入的表达式对 Parent 属性的引用无效。 ”您可以创建一个单独的函数来检查当前表单是否具有父级,并将您的代码基于函数的返回值。

Private Sub Form_Open(Cancel As Integer)
    Dim strPrompt As String
    If HaveParentForm(Me) = True Then
        strPrompt = "I am a subform to '" & _
            Me.Parent.Name & "'."
    Else
        strPrompt = "I am a top level form."
    End If
    MsgBox strPrompt
End Sub

功能 ...

Public Function HaveParentForm(ByRef frm As Form) As Boolean
    Dim blnReturn As Boolean
    Dim strMsg As String

On Error GoTo ErrorHandler

    blnReturn = (Len(frm.Parent.Name) > 0)

ExitHere:
    HaveParentForm = blnReturn
    On Error GoTo 0
    Exit Function

ErrorHandler:
    Select Case Err.Number
    Case 2452 ' The expression you entered has an invalid '
              ' reference to the Parent property. '
    Case Else
        strMsg = "Error " & Err.Number & " (" & Err.Description _
            & ") in procedure HaveParentForm"
        MsgBox strMsg
    End Select
    blnReturn = False
    GoTo ExitHere
End Function
于 2012-08-06T14:24:17.877 回答