在.NET(C#)中,如何从子WinForm引用一个WinForm中的变量?

时间:2009-06-19 23:44:49

标签: c# winforms

鉴于WinForm1中一个类的公共实例化,我尝试打开W​​inForm2并引出数据库参数查询我想用来填充WinForm1中的类实例的结果。但是,我无法弄清楚如何从WinForm2访问WinForm1中的类实例。

WinForm1中的类实例被编码为私有成员/公共属性:

private theClass _classInstance;
public theClass ClassInstance {get; set;}

我将WinForm2称为模态形式。

WinForm2 wf2 = new WinForm2();
wf2.ShowDialog(this);

在wf2 ??

中是否可以引用ClassInstance(修改其值)

3 个答案:

答案 0 :(得分:3)

您可以将引用传递给构造函数中的父窗体或作为子窗体的属性,或者在static字段中保存引用。

class WinForm2 : Form {
     WinForm1 parentForm;
     public WinForm2(WinForm1 parentForm) {
         this.parentForm = parentForm;
         // ....
     }

     // Use `parentForm.ClassInstance` here.
}


WinForm2 wf2 = new WinForm2(this);
wf2.ShowDialog(this);

顺便说一句,当您声明与您指定的自动属性类似的自动属性时,不应手动创建支持字段。编译器会为您解决这个问题。

答案 1 :(得分:0)

您可以在WinForm2上创建一个在实例化时接受WinForm1的构造函数。

public partial class WinForm2 : Form
{
    public WinForm2()
    {
        InitializeComponent();
    }

    Form parentForm
    internal WinForm2(Form parent)
        : this()
    {
        parentForm = parent
    }
}

答案 2 :(得分:0)

在WinForm2中的

(改进以避免Mehrdad指出的可能的运行时故障):

WinForm1 form1 = this.Owner as WinForm1;
if (form1 != null) {
    theClass classInstance = form1.ClassInstance;
    // ...
}

所有者属性返回传递给ShowDialog(IWin32Window window)

的表单