带有主窗体参数的子窗体
Posted
技术标签:
【中文标题】带有主窗体参数的子窗体【英文标题】:SubForm with parameters from the main form 【发布时间】:2012-10-22 16:14:19 【问题描述】:我有一个带有由ID
链接的子表单的表单。问题是子窗体有一个组合框,需要主窗体中的行源参数。
表单是关于销售电话的,他们需要能够根据需要链接许多提案和合同。提案和合同列表的组合框需要与本次销售电话的工厂或客户相关。
我知道我可以通过Forms!FormName!ControlName
获取工厂清单,但这是否意味着我有设计问题?
或者当用户点击主表单的组合框中的元素时,我应该填写一个列表吗?但后来我必须自己处理保存和删除。
谢谢
【问题讨论】:
"Forms!FormName!ControlName 来获取工厂列表,但这是否意味着我有设计问题" 我不明白你为什么会有问题。每一行都指向主窗体,所以你应该没问题。 我认为子表单必须独立于主表单,以便您可以将它用于多个主表单。(不是我的情况) 没有,如果担心的话,可以在子表单的open事件中检查它有父级,如果没有就取消open。 谢谢您,先生,我担心这是一种不好的做法。你能把它写成答案吗? 【参考方案1】:如果子表单需要主表单才能正常运行,您可以检查父表单。例如:
Private Sub Form_Open(Cancel As Integer)
Dim strParent As String
Dim strSubname As String
GetParent Me, strParent, strSubname
If strParent = "None" Then
MsgBox "This is not a stand-alone form.", , "Form Open Error"
Cancel = True
End If
End Sub
Function GetParent(frm, ByRef strParent, ByRef strSubname)
Dim ctl
On Error Resume Next
strParent = frm.Parent.Name
If Err.Number = 2452 Then
Err.Clear
strParent = "None"
Else
For Each ctl In frm.Parent.Controls
If ctl.ControlType = acSubform Then
If ctl.SourceObject = frm.Name Then
strSubname = ctl.Name
End If
End If
Next
End If
End Function
【讨论】:
以上是关于带有主窗体参数的子窗体的主要内容,如果未能解决你的问题,请参考以下文章
使用主窗体中的未绑定文本框过滤 Microsoft Access 中的子窗体