以另一种形式创建/修改列表

时间:2015-09-08 23:34:19

标签: c# winforms

我想打开第二个表单,创建对象,将它们添加到列表中并将列表返回到mainform,但是我无法在mainform中看到列表中的对象。

这是我到目前为止所做的。

的MainForm:

public List<Actor> actorenlijst = new List<Actor>();

public List<Actor> getActoren()
{
    return actorenlijst;
}

public void setActoren(List<Actor> actorlist)
{
    this.actorenlijst = actorlist;
}

private void button3_Click(object sender, EventArgs e)
{
    foreach (Actor actor in actorenlijst)
    {
        MessageBox.Show(actor.getName());
    } 
}

窗体2:

MainForm mainform = new MainForm();
List<Actor> actoren = new List<Actor>();

public void button1_Click(object sender, EventArgs e)
{
    actoren = mainform.getActoren();  //Doesn't work!?!
    if (actoren.Count >= 3)
    {
        MessageBox.Show("You can't add more than 3 actors.");
    }
    else 
    { 
        actoren.Add(new Actor(tbNaam.Text)); 
    }
    foreach (Actor actor in actoren)
    {
        MessageBox.Show(actor.getName()); //works correctly
    }
    mainform.setActoren(actoren); //Doesn't Work !?!
}

当我问Form2中列表中的内容时,它会告诉我我想要什么,但是当我在我的主窗体中执行相同操作时,列表为空。

任何帮助都会受到很多赞赏!!

1 个答案:

答案 0 :(得分:0)

创建新的MainForm将不起作用,因为每个实例都有自己的字段和属性。在新实例上设置actorenlijst不会更改另一个实例上的actorenlijst

相反,您可以使用以下公共属性替换actoren表单上的Nieuwe_Actor

public List<Actor> Actoren { get; set; }

然后当你显示Form2时:

var form2 = new Nieuwe_Actor();
form2.Actoren = this.actorenlijst;
form2.ShowDialog();

现在两个表单都引用了相同的列表,因此不需要setActoren