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 に答える