访问父表单

Gil*_*man 4 .net c# oop winforms

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

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

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

tzu*_*zup 9

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

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

编辑

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

Form2 f2 = new Form2(this);
Run Code Online (Sandbox Code Playgroud)

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

private Form1 m_form = null;
Run Code Online (Sandbox Code Playgroud)

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

public Form2(Form1 f)
{
   m_form = f;
}
Run Code Online (Sandbox Code Playgroud)

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


Ern*_*rno 6

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

Form2 f2 = new Form2();
f2.TheParent = this;
f2.Show();
Run Code Online (Sandbox Code Playgroud)

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

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