访问父表单

时间:2011-02-19 07:47:56

标签: c# .net winforms oop

我知道标题可能看起来很傻,想不出更好的东西,对不起。

我有2个表单(C#),主表单包含第二个表单的实例。 有没有办法...从form2的实例访问Form1(入口点)和他的属性的运行实例?

每个人都告诉我要学习OOP。 很久很久以前,我做到了,但我仍然没有得到它。

3 个答案:

答案 0 :(得分:9)

当主窗体实例化第二个窗体时,它可以将对自身的引用传递给第二个窗体的构造函数。

因此,第二种形式可以访问第一种形式的公共成员。

修改

在Form1中,您在某处实例化Form2并在ctor中传递对Form1的引用:

Form2 f2 = new Form2(this);

在Form2的类定义中添加一个字段:

private Form1 m_form = null;

在第二个表单的构造函数中设置该字段:

public Form2(Form1 f)
{
   m_form = f;
}

然后,在Form2中的任何地方,您都可以通过m_form

访问Form1

答案 1 :(得分:6)

您可能从Form1中实现了Form2。在实例化之后,在显示它之前,您可以在Form2上设置一个属性,引用Form1,如下所示:

Form2 f2 = new Form2();
f2.TheParent = this;
f2.Show();

当然,您必须将TheParent属性添加到Form2类才能够执行此操作。

警告:虽然这种方式可行,但更好的解决方案可能是创建一个包含所有必需/共享数据的单独对象,并以类似的方式将该对象传递给每个表单。这样可以防止代码过于耦合。

答案 2 :(得分:0)

一种解决方法是建立所有者关系。

// Create a form and make this form its owner    
Form ownedForm = new Form();
ownedForm.Owner = this;
ownedForm.Show();

或者作为一种快捷方式,您可以将所有者表单作为参数传递给Show方法的重载,该方法也带有IWin32Window参数

ownedForm.Show(this); // established owner-owned relationship

然后您可以像这样访问主要表单属性

((MainForm)this.Owner).ownerVariable;

要访问此变量/方法,它必须具有internal保护修饰符。