2

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

主要形式:

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

4

2 回答 2

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
        }       

    }
}
于 2013-02-15T18:27:54.170 回答
0

编辑

现在您已重命名函数以表明它是一个构造函数 - 下面的选项 #1 是最好的。只需将IList<person> personStorage其作为参数添加到您的构造函数。(或者IEnumeable<person> personStorage如果您不需要特定于列表的功能,则使其更加通用)


既然AddPersonDialogue对它一无所知Form1,也不知道怎么弄personStorage。假设您正在从这里创建对话框,Form1这里有几个选项:

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

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

于 2013-02-15T18:27:16.430 回答