访问具有表单外对象的列表

本文关键字:对象 列表 表单 访问 | 更新日期: 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,如果您不需要特定于列表的功能,则使其更加通用)


由于AddPersonDialogueForm1一无所知,所以它不知道如何获得personStorage。假设您在Form1中创建对话框,这里有几个选项:

  1. AddPersonDialogue添加一个接受List<person>参数的构造函数,并将该值分配给属性。这样您就可以在AddPersonDialogue中访问它
  2. PersonStorageAddPersonDialogue添加一个公共属性。然后在创建对话框后设置该属性

如果列表对于表单的运行是必不可少的,我会把它放在构造函数中,这样调用者就会知道它是必需的组件。