我有多表单应用程序,我需要一个MyClass()实例可以从每个表单访问。我应该把它放在哪里?
将其公开给 form1,然后以其他形式使用 Form1.MyClassInstance或者最好的方法是什么?
您可以将要共享的对象声明为静态字段:
public partial class Form1 : Form
{
public static object MyObject;
//...
}
...或将其声明为静态属性:
public partial class Form1 : Form
{
private static object obj;
public static object MyObject
{
get { return obj; } // read-only
}
//...
}
...然后你像这样访问它(在其他类中):
object obj = Form1.MyObject;
但是,如果您有多个 Form1 实例,则 MyObject 对于 Form1 的所有实例都是相同的。
另一种方法是通过调用Form.Show()设置Form.Owner属性:
public partial class Form1 : Form
{
public object MyObject; // no static required
public Form1()
{
InitializeComponent();
Form2 f2 = new Form2();
f2.Show(this); // this sets the Form.Owner property on f2
}
//...
}
...然后你像这样访问它(在 Form2 中):
Form1 f1 = (Form1)this.Owner;
object o = f1.MyObject;
这里的优点是您现在可以访问 Form1 的所有公共成员,即使它们没有被声明为静态的。但是如果你最小化/关闭 Form1,Form2 也会被最小化/关闭。
如果不想使用 static 或 Form.Owner,也可以将 Form1 实例的引用作为参数传递。例如,在 Form2 中,您可以编写一个以 Form1 作为参数的构造函数:
public partial class Form2 : Form
{
public Form2(Form1 f1)
{
InitializeComponent();
object o = f1.MyObject; // access MyObject like this
}
//...
}
...并像这样实例化 Form2(在 Form1 中):
Form2 f2 = new Form2(this);