当我关闭它时将对象传递给主窗体

时间:2014-01-03 13:37:55

标签: c# parameter-passing

我有一个我在Form2中创建的对象(主窗体是Form1)。当我在Form2中为对象分配属性时,我希望它可以在Form1中使用。

该对象在Form2中创建

public partial class Form2 : Form
private List<POI> POIs_3D;

public Form2()
{
    InitializeComponent();
    POIs_3D = new List<POI>();
}

然后我为列表对象添加一些值,并希望它在Form1中可用。

我知道这可能很简单,但我无法弄明白......

编辑:

这是打开Form2的代码:

private void btn_3d_Click(object sender, EventArgs e)
{
    Form formulario = new Form2();
    formulario.Show();
}

4 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点

1)在Form1中声明对象。创建时将其传递给Form2。让Form2设置值。

2)在Form2中创建一个property / variable内部,并让Form1读取该属性。如果你想在结束Form2时得到结果,这可能有点复杂,因为你必须从Form2调用Form1中的方法才能获得值。

3)在Form1中创建一个Property / Variable内部,并让Form2设置该值。这要求Form2知道Form1的实例。您可以在显示时在Form2的Owner属性中传递它。 Form2.Show(this)

答案 1 :(得分:0)

Form2中,更改此内容:

private List<POI> POIs_3D;

到此:

public List<POI> POIs_3D { get; private set; }

现在您可以在Form2 Form1的实例上访问它了。 private set;表示没有其他人可以实际设置该值。

答案 2 :(得分:0)

创建List POIs_3D的公共属性

public partial class Form2 : Form

private List<POI> pOIs_3D;
public List<POI> POIs_3D
{
    get { return pOIs_3D; }
    set { pOIs_3D = value; }
}    

public Form2()
{
    InitializeComponent();
    POIs_3D = new List<POI>();
}

在Visual Studio中:

  1. 右键单击私有字段
  2. 选择“重构”
  3. 点击“封装字段”
  4. 点击“确定”
  5. 点击“应用”
  6. <强>更新

    您可以像这样访问该媒体资源:

    public partial class Form1 : Form
    {
       private Form2 form2;  
    
        public Form1()
        {
            InitializeComponent();  
            form2 = new Form2();
            List<POI> myList =  form2.POIs_3D;   //Access the property of Form2    
        }
    }
    

答案 3 :(得分:0)

为什么不重载Form2的构造函数(我猜是从Form1代码创建)来获取在Form1中创建的对象。

public Form2(Object data)
{
    this.dataObject=data;
    InitializeComponent();
}

//in Form1
new Form2(myDataObject);