我有一个表单,其中包含存储对象的列表。然后,我有一个对话框,我希望访问此列表并循环其内容。
主要形式:
namespace personregister
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public List<person> personStorage = new List<person>();
在对话中我想做这样的事情:
namespace personregister
{
public partial class AddPersonDialogue : Form
{
public AddPersondialogue()
{
InitializeComponent();
foreach (person p in personStorage)
{
//do stuff
}
}
问题是我无法访问我在其他表单中创建的personStorage。如何在对话窗口中访问该列表?
答案 0 :(得分:1)
添加一个方法来进行对话并在构造后进行调用。
public partial class AddPersonDialogue : Form
{
public AddPersonDialogue()
{
InitializeComponent();
}
public void SetUpPeople(List<person> personStorage)
{
foreach (person p in personStorage)
{
//do stuff
}
}
}
public Form1()
{
{
InitializeComponent();
}
public List<person> personStorage = new List<person>();
public void ShowForm()
{
var dialogue = new AddPersonDialogue();
dialogue.SetUpPeople(personStorage);
dialogue.Show();
}
}
您也可以通过构造函数来完成。
public partial class AddPersonDialogue : Form
{
public AddPersonDialogue(List<person> personStorage)
{
InitializeComponent();
foreach (person p in personStorage)
{
//do stuff
}
}
}
答案 1 :(得分:0)
修改强>
现在你已经重命名了你的函数来表明它是一个构造函数 - 选项#1是最好的。只需将IList<person> personStorage
作为参数添加到构造函数中。 (或IEnumeable<person> personStorage
如果您不需要特定于列表的功能,则使其更具通用性)
<小时/>
由于AddPersonDialogue
对Form1
一无所知,因此不知道如何获取personStorage
。假设您正在Form1
内创建对话框,这里有几个选项:
AddPersonDialogue
添加一个带有List<person>
参数的构造函数,并将该值赋给属性。这样您就可以在AddPersonDialogue
。{/ li>中访问它
AddPersonDialogue
的{{1}}添加公共属性。然后在创建对话框后设置该属性。如果列表对于运行表单至关重要,我会将其放在构造函数中,以便调用者知道它是必需的组件。