DOBON.NETプログラミング道掲示板

No34146 の記事


■34146 / )  Re[2]: リストを別フォームに渡す方法
□投稿者/ 魔界の仮面弁士 大御所(1198回)-(2019/02/19(Tue) 16:59:25)
  • アイコン2019/02/19(Tue) 18:37:38 編集(投稿者)

    No34143に返信(包装紙さんの記事)
    > textBoxAddress.Text = "";
    > textBoxZipCode.Text = "";
    この 2 つの TextBox は、Form1 上にあるのですよね。


    > Form2ではテキストボックスが3つあります。テキストボックスにユーザーが値を入力します。
    > textBoxName1.Text = "YAMADA";
    > textBoxName2.Text = "TARO";
    > textBoxSex.Text = "MALE";
    この 3 つの TextBox は、Form2 上にあるのですよね。


    > lst.Add(textBox1.Text);
    > lst.Add(textBox2.Text);
    > lst.Add(textBox3.Text);
    この 3 つの TextBox は何でしょう?
    Form2 にある先の 3 つの TextBox の別名でしょうか。



    No34144に追記(魔界の仮面弁士の記事)
    > === 案1 ===
    > FontDialog クラスの Apply イベントを真似て、
    > Form2 側に独自のイベントを設けておき、
    > イベント引数またはプロパティで List<string> を返すようにする。


    【案1の実装例】

    public partial class Form1 : Form
    {
     private void Search(List<string> list)
     {
      // 実際は SQL での問い合わせを実施
      textBoxAddress.Text = "住所" + list.Count;
      textBoxZipCode.Text = "郵便番号";
     }

     private void button1_Click(object sender, EventArgs e)
     {
      using (var dialog = new Form2())
      {
       dialog.Apply += delegate { Search(dialog.CurrentList); };
       if (dialog.ShowDialog(this) == DialogResult.OK)
       {
        Search(dialog.CurrentList);
       }
      }
     }
    }

    public sealed partial class Form2 : Form
    {
     private void Form2_Load(object sender, EventArgs e)
     {
      // 下記はコードではなく、デザイン時に指定しておけば OK。
      button1.Text = "OK";
      button2.Text = "キャンセル";
      button3.Text = "適用";
      button1.DialogResult = DialogResult.OK;
      button2.DialogResult = DialogResult.Cancel;
      button3.DialogResult = DialogResult.None;
      AcceptButton = button1;
      CancelButton = button2;

      // button3.Click イベントへの「button3_Click」割り当ても忘れずに。
      // button1 / button2 の Click イベントは何も割り当てなくても構わない。
     }

     // Form2 の CurrentList プロパティは、
     // Form2 側の入力値を List<string> で返すためのもの
     public List<string> CurrentList
     {
      get
      {
       return new List<string>
       {
        textBoxName1.Text,
        textBoxName2.Text,
        textBoxSex.Text,
       };
      }
     }

     // Form2 の Apply イベントは、
     // Form2 の「適用」ボタン(button3)が押された事を知らせるもの
     public EventHandler Apply;

     private void button3_Click(object sender, EventArgs e)
     {
      // button3 が押されたら、Apply イベントを発火する
      Apply?.Invoke(this, EventArgs.Empty);
     }
    }
違反を報告
返信 削除キー/


Mode/  Pass/


- Child Tree -