我有两种形式,在Form1中,从类创建对象并放入列表(对象列表)。然后我有另一个字符串列表,它应该是Form2
的源 - 字符串列表包含对象的属性转换为字符串的元素。打开后,Form2
应读取字符串列表中的数据并将其放入列表框中。问题是它没有看到数据。我可以访问Form1
中的数据,因此我确定列表已填充,但Form2无法访问数据 - 如何解决此问题?
我尝试过从论坛和其他来源获得的不同想法,但没有一个对我有用。什么工作填充了应该是Form1'初始化组件'中的数据源的列表,但它不是一个完美的解决方案,因为对象是在单击按钮后创建的。现在我将列表放在Form1类的顶部,但仍然通过单击按钮填充它 - 它不起作用,列表框仍然是空的。
以下是Form1
的代码:
public partial class Form1 : Form
{
public House MyHouse = new House();
public List<string> allPeopleSource = new List<string>();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Person p1 = new Person("Simon", 33);
Person p2 = new Person("Peter", 23);
MyHouse.IsInhabitedBy(p1);
MyHouse.IsInhabitedBy(p2);
allPeopleSource.Add(p1.Name + " | " + p1.Age.ToString());
allPeopleSource.Add(p2.Name + " | " + p2.Age.ToString());
Form2 lista = new Form2();
lista.ShowDialog();
}
}
以下是Form2
的代码:
public partial class Form2 : Form
{
Form1 main = new Form1();
List<string> allPeople = new List<string>();
public Form2()
{
InitializeComponent();
foreach (string s in main.allPeopleSource)
{
allPeople.Add(s);
}
foreach (string s in allPeople)
{
lsbResidents.Items.Add(s);
}
}
}
我感谢任何帮助。
答案 0 :(得分:2)
更改此:
Form2 lista = new Form2();
这样的事情:
Form2 lista = new Form2(allPeopleSource);
从form2中删除它:
Form1 main = new Form1();
并将此代码放入form2
List<string> allPeopleSourceInForm2;
Public Form2(List<string> allSourcesAsParameter)
{
allPeopleSourceInForm2 = allSourcesAsParameter;
}
现在你的代码应该可行了。我们在这里做的是将一个列表引用到Form2。 Form1包含所有信息,我们只是将此数据的地址传递给Form2。此引用作为构造函数参数提供给Form2。在Form2构造函数中,我们可以使用数据执行任何操作,但请注意,form2中对集合的所有更改都将影响Form1中的集合。
答案 1 :(得分:1)
您可以创建一个方法来填充Form2上的列表(我称之为SetAllPeople
):
public partial class Form2 : Form
{
public void SetAllPeople(List<string> input)
{
foreach (string s in input)
{
lsbResidents.Items.Add(s);
}
}
public Form2()
{
InitializeComponent();
}
}
然后以这种方式调用Form2
:
Form2 lista = new Form2();
lista.SetAllPeople(allPeopleSource);
lista.ShowDialog();