如何访问父表单?

时间:2013-09-02 13:56:08

标签: c# winforms

好的,所以很多人都以这种或那种方式提出这个问题,但除了在调用孩子时传递父对象之外,似乎没有很多答案。问题是,我无法访问父代码。

这是我的情况。

我无法访问的一些代码,我只是使用了dll(父窗体),在我的代码中调用了一个函数(子窗体)。

我的函数调用第三方SDK(不那么重要),需要父表单作为参数之一。此外,我无法访问第三方代码,只能通过一些c ++库。

我的孩子能否知道其父母,或者注定要成为孤儿?

4 个答案:

答案 0 :(得分:2)

也许我错过了什么,但你可以使用ContainerControl.ParentForm

var parent = myForm.ParentForm;

或者(如果你实际上没有要询问的表格,而是有一个控制权):

var parent = myForm.Parent;

请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.control.parent.aspx

然后该父级的Windows API句柄将是:

IntPtr handle = parent.Handle;

您可以将其传递给第三方SDK。

请参阅http://msdn.microsoft.com/en-us/library/system.windows.forms.control.handle.aspx

如果你需要检查父母是否真的是一个表格:

Form form = myForm.Parent as Form;

if (form != null)
    // Do something with form.

但是就像人们说的那样:你应该能够使用myForm.ParentForm

答案 1 :(得分:2)

最常见的情况下(因为你的表单在dll中的某个地方,你必须将父表单传递给第三方软件) - WinAPI - 你可以用{{1}检索父窗口句柄功能

http://msdn.microsoft.com/en-us/library/windows/desktop/ms633510(v=vs.85).aspx

类似的东西:

GetParent

答案 2 :(得分:0)

您的表单是否显示在另一个的顶部?试试Form.Owner属性。

你绝对确定要这么做吗?您可能有充分理由不能访问父表单。请注意不要通过规避此限制来破坏框架或模式。

答案 3 :(得分:0)

最好(为了你的心理健全)从父母表格传递所有需要的信息到孩子的表格,这样你只需要以一种方式思考(父母形式将一些信息传递给孩子,孩子传递信息+更多信息给下一个孩子等等)

依赖于其他形式的表单/类是否称为硬耦合,这是维护软件的问题。