访问具有表单外对象的列表
本文关键字:对象 列表 表单 访问 | 更新日期: 2023-09-27 17:59:28
我有一个表单,其中存储了一个包含对象的列表。然后我有一个对话框,我希望在其中访问此列表并循环浏览其内容。
主要形式:
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。我如何访问对话框窗口中的列表?
添加一个方法来进行拨号,并在构造后进行调用。
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是最好的。只需将IList<person> personStorage
作为参数添加到构造函数中即可。(或者IEnumeable<person> personStorage
,如果您不需要特定于列表的功能,则使其更加通用)
由于AddPersonDialogue
对Form1
一无所知,所以它不知道如何获得personStorage
。假设您在Form1
中创建对话框,这里有几个选项:
- 向
AddPersonDialogue
添加一个接受List<person>
参数的构造函数,并将该值分配给属性。这样您就可以在AddPersonDialogue
中访问它 - 为
PersonStorage
向AddPersonDialogue
添加一个公共属性。然后在创建对话框后设置该属性
如果列表对于表单的运行是必不可少的,我会把它放在构造函数中,这样调用者就会知道它是必需的组件。