如何link动态加载无界子窗体到主窗体?

How to link dynamically loaded unbounded subforms to main form?

我有一个带有组合框的绑定主窗体 (FormA) 和两个未绑定的子窗体(subfrmA 和 subfrmB)。 (这两种形式都附加到 table 但是我希望它们加载到主窗体上,我将未绑定的子窗体作为占位符。)

组合框有两个值“a”和“b”。当 a 被 selected 时,我希望 subfrm A 加载到 Form A 上。当 b 被 selected 时,我希望 subfrmB 加载到 Form A 上。我认为这部分工作。

然而,当我 select 在主窗体上记录时,关联的子窗体不会出现。当我尝试 link 子表单到主表单时,会出现一条错误消息,提示我无法在未绑定表单之间构建 link。

packageID是主窗体和子窗体之间的link,是所有窗体的隐藏字段。每当 packageID 自动更新时,子表单字段中的 psckageID 也会更新。

Case”A”                  
    Me.subfrmAB.SourceObject=“FormA
    Me.packageDetailsID=Me.subfrmAB.packageDetailsID
Case “B”                                                  
    Me.subfrmAB.SourceObject=“FormB”
    Me.packageDetailsID=Me.subfrmAB.packageDetailsID

编辑:我最终创建了两个子表单 subfrmA(表单 A)和 subfrmB(表单 B)。然后我 link 通过主子 links.

将两者都编辑到父表单

我根据用户 select 在主窗体的组合框中设置了一个子窗体可见而另一个不可见。

除窗体 B 无法加载外,一切正常,但容器会加载。我尝试单独加载 Form B,它仍然无法加载。我也删除了 subfrmA,但 Form B 仍然无法加载。

这是我编辑的代码:

Select Case Me.Authorization.Text
    Case “A”
        Me.subfrmA.Visible = True
        Me.subfrmB.Visible = False
        Me.subfrmA.SourceObject = “Form.A”
    Case “B”
        Me.subfrmB.Visible = True
        Me.subfrmA.Visible = False
        Me.subfrmB.SourceObject = “Form.B”
End Select

唯一行不通的是 Me.subfrmB.SourceObject=“Form.B”,确实有一些东西阻止了表单的专门加载。我为 Form A 和 Form B 编写了相同的代码,但无法弄清楚 Form B 有什么问题。

一个选项是用一条记录创建一个虚拟 table 并将子表单绑定到它。但是你必须用代码读写所有的值。

当然可以。这是一个对我有用的简单示例。

主窗体绑定到 table 游戏。用作子表单的表单是裁判和团队。

组合框属性:

ControlSource: UNBOUND
RowSource: Umpires;Plate;UmpID;Teams;HomeTeam;TeamID
RowSourceType: ValueList
BoundColumn: 1
ColumnCount: 3
ColumnWidths: 1.0";0";0"

代码:

Private Sub Combo108_AfterUpdate()
With Me
.ctrAB.SourceObject = .Combo108
.ctrAB.LinkMasterFields = .Combo108.Column(1)
.ctrAB.LinkChildFields = .Combo108.Column(2)
End With
End Sub

您可以在组合框 RowSource 中使用“A”、“B”作为表单名称,然后如果两个表单具有相同名称的关键字段,则在 RowSource 中不需要它们,只需硬编码即可。不完全清楚关键字段名称是什么。然后代码如下:

.subfrmAB.SourceObject = "subfrm" & .Combo108
.subfrmAB.LinkMasterFields ="packageDetailsID"
.subfrmAB.LinkChildFields = "packageDetailsID"

如果要将“A”和“B”保存到主窗体记录,则将组合框绑定到字段。然后,为了在导航主窗体时针对每条记录更改子窗体,在窗体 OnCurrent 事件中也有代码。

编写 form/subform 之间的交互时需要注意的事项:子表单在主表单之前加载 - 看起来很奇怪但确实如此。