我有多表单应用程序,我需要从每个表单访问 MyClass()的一个实例。 我应该把它放在哪里?
将form1公开给form1然后以其他形式公开 Form1.MyClassInstance 或者最好的方法是什么?
答案 0 :(得分:1)
您可以将要共享的对象声明为static字段:
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实例,则对于Form1的所有实例,MyObject将是相同的。
另一种方法是通过调用Form.Owner:
来设置Form.Show()属性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);