C# - 从一个表单到另一个表单获取列表<string>数据

C# - Get a List<string> data from a form to another

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

这些是我程序的截图。

这是我的Form1的代码。

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());
    }

然后在我的 Form2 中,我创建了一个 Form1 的实例并调用了 List 列表,但是当加载 Form2 时,ListBox 中没有填充数据,而且当加载时 List 列表似乎不包含任何数据加载 Form2。这是我在 Form2 中的代码。

public Form2()
    {
        InitializeComponent();
    }

    private void Form2_Load(object sender, EventArgs e)
    {
        Form1 form1 = new Form1();

        listBox1.DataSource = form1.list;
    }

知道如何解决这个问题吗?我尝试了我能做的一切,但我无法解决问题。对不起我的错误,我只是 C# 的初学者,在我的课程和这里的 Whosebug 中。提前谢谢你。

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

public class Form2
{
     public Form2(Array arr)
     {
        listBox.DataSource = arr;
     }
}

重要的是不要直接传递 Form 对象,以免在这些表单之间创建耦合 - 我们只对数据感兴趣。

在 Form1 中,更改:

form2.ShowDialog();

收件人:

form2.ShowDialog(this); // pass in this Form1 instance as the "Owner"

然后在Form2中,更改:

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;
}