访问包含表单外部对象的列表

时间:2013-02-15 18:19:31

标签: c#

我有一个表单,其中包含存储对象的列表。然后,我有一个对话框,我希望访问此列表并循环其内容。

主要形式:

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。如何在对话窗口中访问该列表?

2 个答案:

答案 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如果您不需要特定于列表的功能,则使其更具通用性)

<小时/>

由于AddPersonDialogueForm1一无所知,因此不知道如何获取personStorage。假设您正在Form1内创建对话框,这里有几个选项:

  1. AddPersonDialogue添加一个带有List<person>参数的构造函数,并将该值赋给属性。这样您就可以在AddPersonDialogue。{/ li>中访问它
  2. AddPersonDialogue的{​​{1}}添加公共属性。然后在创建对话框后设置该属性。
  3. 如果列表对于运行表单至关重要,我会将其放在构造函数中,以便调用者知道它是必需的组件。