2013-02-15 74 views
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我在其他形式的创建。如何在对话框中访问该列表?

回答

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 
     }  

    } 
} 
+0

谢谢先生! :) 我想我明白 – 2013-02-15 18:33:11

0

编辑

现在你已经改名为你的函数来显示它的下方的constructor-选项#1是最好的。只需将IList<person> personStorage作为参数添加到您的构造函数中即可。 (或IEnumeable<person> personStorage,使其更加灵活,如果你不需要特定列表的功能)


由于AddPersonDialogue不知道什么Form1它不知道如何获得personStorage。假设你正在创建从Form1内的对话框这里有几个选项:

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

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

+0

谢谢!我想我现在得到它:) – 2013-02-15 18:35:49