2017-05-20 7 views
0

メインフォームからShowDialog()でフォームを呼び出します。ダイアログフォームから値を1つずつ渡すのではなく、メインフォームのオプションを渡すことができるように、値のリストを渡したいと思います(メインフォームのオプション、ダイアログのフィールド数フォームは異なります)。List <string>オブジェクトをダイアログボックスからメインフォームに渡すにはどうすればよいですか?

しかし、このコードではプログラムがクラッシュしますが、例外は発生しません。このメソッドは単純な変数で動作したので、問題はリストにある必要があります。

ダイアログフォームのクラスは、これを含んでいます

List<string> valuesToReturn; 
public List<string> ValuesToReturn { get => ValuesToReturn; set => ValuesToReturn = value; } 

ダイアログフォームのコンストラクタは、リストの新しいインスタンスを作成します:

valuesToReturn = new List<string>(); 

をし、イベントハンドラの中で(入力したときに押されて)IすべてのNoEnterTextBox-esの値をリストに追加します。

foreach (object item in this.Controls) 
{ 
    if(item is NoEnterTextBox) { 
     valuesToReturn.Add((item as NoEnterTextBox).Text); 
    } 
} 

このコードを修正する方法を教えてください。ありがとうございました。

+0

私の2つのフォームプロジェクトを参照してください:http://stackoverflow.com/questions/34975508/reach-control-from-another-page-asp-net – jdweng

+0

私は問題を起こさなかった、それは通過する能力ですかダイアログフォームからメインフォームへの値、またはvaluesToReturnに追加したい値をforeachループでリストしますか? – jonathana

+0

(ダイアログフォームの)すべてのテキストボックスのテキストをリストに追加し、そのリストをメインフォームで取得したいとします。メインフォームよりも、そのリストの要素にアクセスしたいと思います。 – Gabe

答えて

0

Form1をリフレッシュする必要があるかどうかを判断するには、形式2の値DialogResultを使用します。 HandleList()メソッドは、すべてのテキストボックス.textをリストに入力します。

Form2Form1から呼び出す:あなたは、コードのその部分を行うことができますForm2に別のボタンで

private void button1_Click(object sender, EventArgs e) 
     { 
      this.DialogResult = DialogResult.OK; 
      HandleList(); 
      this.Close(); 
     } 

    private void HandleList() 
    { 

     foreach (Control c in this.Controls) 
     { 
      if(c is TextBox) 
      { 
       valuesToReturn.Add(c.Text); 
      } 
     } 
    }  

private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 f2 = new Form2(); 
      if (f2.ShowDialog() == DialogResult.OK) 

      { 
       // refresh form 
       AddItemsFromListInForm2(f2.valuesToReturn); 
      } 
     } 

private void AddItemsFromListInForm2(List<string> valuesToReturn) 
{ 
    // do something with valuesToReturn... 
} 

ユーザーを押す(OK \保存)form2上のボタンを場合は、Form1をリフレッシュしたくない場合があります:

private void button2_Click(object sender, EventArgs e) 
      { 
       this.DialogResult = DialogResult.Cancel; 
       this.Close(); 
      } 
関連する問題