2012-12-18 72 views
1

我有多表单应用程序,我需要从每个表单访问一个MyClass()实例。 我应该把它放在哪里?在多个表单之间共享对象实例

将其公开为form1,然后用其他形式的用户Form1.MyClassInstance或者什么是最佳方式?

+0

你有一个应用程序控制器类或类似的东西?在确定它是一个单身人士后,如果您的功能需要这样做,那将是最好的地方。 – ryadavilli

+0

你使用C#还是VB.NET? –

回答

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,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); 
相关问题