C#-获取列表<;字符串>;从一个窗体到另一个窗体的数据

C#-获取列表<;字符串>;从一个窗体到另一个窗体的数据,c#,list,listbox,datasource,C#,List,Listbox,Datasource,我想就我的问题寻求帮助。我的问题是,我无法从另一个表单获取列表的值,并将其传输到另一个表单的列表框中。。我想让列表中的元素成为列表框的数据源 这是我程序的截图 这是我表格1的代码 public Form1() { InitializeComponent(); } public List<string> list = new List<string>(); private void button1_Click(object

我想就我的问题寻求帮助。我的问题是,我无法从另一个表单获取列表的值,并将其传输到另一个表单的列表框中。。我想让列表中的元素成为列表框的数据源

这是我程序的截图

这是我表格1的代码

public Form1()
    {
        InitializeComponent();
    }

    public List<string> list = new List<string>();
    private void button1_Click(object sender, EventArgs e)
    {
        Form2 form2 = new Form2();

        form2.ShowDialog();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        list.Add("!");

        MessageBox.Show(list.Count.ToString());
    }

你知道我怎样才能解决这个问题吗?我尽了我所能,但解决不了这个问题。对不起,我的错误,我只是C#的初学者,在我的课程和这里的stackoverflow。提前感谢。

Form2
的构造函数中,您正在使用新的
ListBox
对象创建
Form1
的新实例,该对象为空。 您应该通过其构造函数将
列表框的数据源传递给
表单2

public class Form2
{
     public Form2(Array arr)
     {
        listBox.DataSource = arr;
     }
}
重要的是不要直接传递
表单
对象,以免在这些表单之间产生耦合-我们只对数据感兴趣。

在表单1中,更改:

form2.ShowDialog();
致:

然后在表2中,更改:

private void Form2_Load(object sender, EventArgs e)
{
    Form1 form1 = new Form1();
    listBox1.DataSource = form1.list;
}
致:


在form2接受列表上创建一个构造函数,并像这样传递值。public Form2(List collection){//do logic}如果使用这种方法,则更改
Form2 Form2=new Form2()
表格2表格2=新表格2(列表)。使用这种方法,您只能将Form2与Form1一起使用(因为我们正在将
Owner
转换为键入Form1)。如果您计划将Form2与其他表单一起使用,那么请使用baryo发布的构造函数方法。这种方法是一种“紧密耦合”的方法,而baryo的方法是一种“松散耦合”的方法。
form2.ShowDialog(this); // pass in this Form1 instance as the "Owner"
private void Form2_Load(object sender, EventArgs e)
{
    Form1 form1 = new Form1();
    listBox1.DataSource = form1.list;
}
private void Form2_Load(object sender, EventArgs e)
{
    Form1 f1 = (Form1)this.Owner;
    listBox1.DataSource = f1.list;
}