【发布时间】:2014-12-15 09:27:48
【问题描述】:
我知道这是一个非常受讨论的问题,但我没有找到好的答案。 我有一个包含 Form1 实例(DataGridView 列表)的 MainForm,它有一个子表单 Form2(包含来自 Form1 的选定记录的详细信息)。 Form1 可以有多个实例(可以加载到不同的独立选项卡中),Form2 可以作为独立表单加载到选项卡中,或者(就是这种情况)作为所选记录的详细信息加载到 Form1 中。
选择记录时,我可以轻松地从 Form1 刷新 Form2(通过定义“Protected f2 As New Form2”,我可以从 Form2 运行 subs)。但是如何从 Form2 运行 Form1 中的子程序?我用谷歌搜索:
-
获取父类参考
Dim theParentForm1 As Form = TryCast(Me.Owner, Form) theParentForm1.MyRefreshSub()...这是有道理的,因为实例总是成对的。但是上面的代码对我不起作用,我无法从 theParentForm1 访问“MyRefreshSub()”。也许我声明的东西不正确......
Interface - 看了很多关于使用interface的推荐,但是没有找到使用interface刷新父窗体的单个示例!
有人能指出我的解决方案吗?
问候,
Libor
【问题讨论】:
-
你的问题很混乱。标题问一件事,然后
how do I run a sub in Form1 from Form2似乎想要反过来。也就是说,Dim theParentForm1 As Form = TryCast(Me.Owner, Form)不会有太大帮助,因为在System.Windows.Forms.Form中没有定义MyRefreshSub。尝试转换为Form1或任何实际具有该方法的类。 -
谢谢,但这不起作用,我会在下面的答案下写下描述
-
我怀疑这是一个 XY 问题。我强烈怀疑您的子表单概念是将表单嵌入到 TabPage 中,如果是这种情况,您可能会提到这一点,因为这是一件相当奇怪的事情。否则,您将不得不扩展“这不起作用”。如果
MyrefreshSub是Public 并且thisForm被转换为包含它的表单类的实例,那么thisForm.MyRefreshSub应该可以工作。 -
对不起,我花了一些时间在下面发布详细描述。就是如你所说,表单被加载到一个TabControl1.tabpage1 中。我使用这个简单的“框架”已经好几年了,而且效果很好,但直到现在我还没有做反向交叉引用。在我的情况下,编译后,从 Form2 引用 .parent 不会返回对 Form1 的引用,而是返回到 MainForm。我认为这是关键问题。