从主窗体引用子窗体错误

Posted

技术标签:

【中文标题】从主窗体引用子窗体错误【英文标题】:Reference a subform from main form Error 【发布时间】:2018-04-13 13:59:49 【问题描述】:

我一定是疯了。出于某种原因,我无法让这个简单的程序起作用。这是一个下拉菜单,用户可以在其中选择他们想要查看的数据。我只需要它来更改子表单的记录源并刷新它。它基本上只是用一个过滤后的查询替换另一个。似乎无法通过主窗体访问子窗体。不确定这是否是最好的方式,但这是我知道的方式。

Private Sub PeriodSelect_Change()
If PeriodSelect.Value = "Active" Then
Me!ServiceWindow.SbfmService_Item.RecordSource = Service_Active
ServiceWindow.Requery

Else
If PeriodSelect.Value = "PDI" Then
Me!ServiceWindow.SbfmService_Item.RecordSource = Service_PDI
ServiceWindow.Requery

End If
End If
End Sub

我收到错误 438 对象不支持此属性或方法。无法完全弄清楚我错过了什么。

非常感谢任何帮助。

【问题讨论】:

只是检查低悬的果实,但是当您这样做时您确实打开了 ServiceWindow 表单,对吗?子表单是否也打开/可见/活动? 是的。都活跃。子表单是开放的,默认情况下,记录源是“Service_Active”。数据可见。当您从下拉菜单中选择“PDI”时,会出现错误。 我很确定您在分配记录源的查询中只需要双引号。 Me!ServiceWindow.SbfmService_Item.RecordSource = "Service_PDI" 【参考方案1】:

您试图在子窗体控件上设置RecordSource,而不是在子窗体控件内的窗体上。使用Form 属性访问该表单:

Private Sub PeriodSelect_Change()
If PeriodSelect.Value = "Active" Then
Me!ServiceWindow.SbfmService_Item.Form.RecordSource = "Service_Active"
ServiceWindow.Requery

Else
If PeriodSelect.Value = "PDI" Then
Me!ServiceWindow.SbfmService_Item.Form.RecordSource = "Service_PDI"
ServiceWindow.Requery

End If
End If
End Sub

【讨论】:

我投了赞成票,因为我相信这是正确的,哈哈。几个月前我更新了一些子表单记录源,但目前我无法访问该代码。除非我自己验证了它是否有效,否则我不会发布答案,因此我对 OP 的“非常肯定”评论。

以上是关于从主窗体引用子窗体错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 从主窗体设置子窗体上的窗体属性

如何从主窗体更新子窗体中的图像框控件源

将值从主窗体传递到子窗体

无法引用子窗体以重新填充记录源运行时错误 2450 无法找到主窗体

在子窗体中引用控件

delphi 子窗体如何调用父窗体的方法