是否仍然可以在父窗体中检测子窗体执行的插入操作?
澄清一下:我有一系列数据输入表格,每个表格都有一个按钮,用于在适当的表格中添加一个条目(使用表格中提供的数据)。我试图将它们中的每一个依次设置为“向导”父表单中的子表单,该表单将遍历所有数据输入表单。
当涉及到表单之间的切换时,我的问题就出现了,因为很明显,这个父表单中的AfterInsert事件没有检测到子表单中包含的表单触发的插入。我知道我可以将插入的触发器移动到父窗体中的按钮;但是,据我所知,这需要为数据输入表单中的每个按钮设置click事件的代码为public,以便可以从父表单的代码中调用它们。我很乐意这样做,因此希望有其他选择。
答案 0 :(得分: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