C#-获取列表<;字符串>;从一个窗体到另一个窗体的数据
我想就我的问题寻求帮助。我的问题是,我无法从另一个表单获取列表的值,并将其传输到另一个表单的列表框中。。我想让列表中的元素成为列表框的数据源 这是我程序的截图 这是我表格1的代码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
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;
}