鉴于WinForm1中一个类的公共实例化,我尝试打开WinForm2并引出数据库参数查询我想用来填充WinForm1中的类实例的结果。但是,我无法弄清楚如何从WinForm2访问WinForm1中的类实例。
WinForm1中的类实例被编码为私有成员/公共属性:
private theClass _classInstance;
public theClass ClassInstance {get; set;}
我将WinForm2称为模态形式。
WinForm2 wf2 = new WinForm2();
wf2.ShowDialog(this);
在wf2 ??
中是否可以引用ClassInstance(修改其值)答案 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)
(改进以避免Mehrdad指出的可能的运行时故障):
WinForm1 form1 = this.Owner as WinForm1;
if (form1 != null) {
theClass classInstance = form1.ClassInstance;
// ...
}
所有者属性返回传递给ShowDialog(IWin32Window window)