1
我有多表单应用程序,我需要从每个表单访问一个MyClass()实例。 我应该把它放在哪里?在多个表单之间共享对象实例
将其公开为form1,然后用其他形式的用户Form1.MyClassInstance或者什么是最佳方式?
我有多表单应用程序,我需要从每个表单访问一个MyClass()实例。 我应该把它放在哪里?在多个表单之间共享对象实例
将其公开为form1,然后用其他形式的用户Form1.MyClassInstance或者什么是最佳方式?
你可以声明你想分享的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,MyObject对于Form1的所有实例都是相同的。通过
另一种方法是设置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
}
//...
}
...然后你访问它像这样(在窗体2):
Form1 f1 = (Form1)this.Owner;
object o = f1.MyObject;
优势现在您可以访问Form1的所有公共成员,即使它们没有声明为静态。但是,如果您最小化/关闭Form1,Form2也将被最小化/关闭。
如果您不想使用静态或Form.Owner,还可以将对Form1实例的引用作为参数传递。例如,在窗体2你可以写一个构造函数Form1中作为一个参数:
public partial class Form2 : Form
{
public Form2(Form1 f1)
{
InitializeComponent();
object o = f1.MyObject; // access MyObject like this
}
//...
}
...和实例化窗体2这样的(在Form1中):
Form2 f2 = new Form2(this);
你有一个应用程序控制器类或类似的东西?在确定它是一个单身人士后,如果您的功能需要这样做,那将是最好的地方。 – ryadavilli
你使用C#还是VB.NET? –