2012-10-25 79 views
1

我试图访问父窗体函数(方法)。即使通过使用static关键字,它也不起作用。如何访问父窗体功能?

父窗体是类型(MDI)并具有正常的子窗体。这是C#应用程序。我试图使用这种方式来访问方法,但没有前进!

this.MdiParent 

请帮帮我!

+0

您是否尝试过铸造'这.MdiParent'到父窗体的类型? –

回答

8

如果声明为static方法,那么你应该通过父窗体的类名给他们打电话:

YourParentFormType.YourStaticMethod(); 

如果你想使用实例方法,那么你应该声明为public,并呼吁通过铸造MDI父参考:

((YourParentFormType)this.MdiParent).YourInstanceMethod(); 
+0

如果它们不是静态的? – Hatem

+0

@Hatem更新,例如方法调用 –

+0

伟大:)感谢朋友 – Hatem

3

您必须将this.MdiParent转换为正确的类型。

如果你的父窗体是MyForm类型,使用

((MyForm)this.MdiParent).MyMethod(); 

同为静态方法:通过右型

MyForm.MyStaticMethod(); 
+0

对不起,这是行不通的。我的意思是只有本地方法不允许第一种情况下的用户定义的方法(非静态) – Hatem

+0

@Hatem在接受完全相同的答案时,您的意思是*不工作*是什么意思? – sloth

0

this.MdiParent返回类型的表格的实例调用它们

这意味着它只会显示在Form类定义中定义的函数。

为了达到其他方法,您需要将其转换为植入表单的类类型,例如,

((MyForm的)形式).MyFunction()

0

静态方法可以通过使用Type.Method()访问。

如果您想查看实例方法,则需要将MdiParent转换为正确的类型。

MyParentType parent = (MyParentType)this.MdiParent; 
parent.SomeMethod(); 
+0

对不起,这是行不通的。我的意思是只有本地方法不允许用户定义的方法。 – Hatem

+0

这些句子和接受的答案有什么不同?什么不起作用? –

0

您需要在您创建时设置窗体的MdiParent属性:

// Make the new form a child form. 
child.MdiParent = this; 
// Display the child form. 
child.Show(); 

然后你就可以访问父窗体。如果你只是想表单属性你不;吨需要转换:

Form parent = this.MdIParent; 
string parentTitle = parent.Text; 

如果您需要访问cusotm性能/ methoids只是将它转换为正确的类型:

ParentForm parent = this.MdIParent as ParentForm; // using your own type name of course 
string title = parent.MyStringProperty;