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

■34152 / 7階層)  リストを別フォームに渡す方法
□投稿者/ 魔界の仮面弁士 大御所(1199回)-(2019/02/20(Wed) 09:26:43)
  • アイコン2019/02/20(Wed) 09:32:12 編集(投稿者)

    No34151に返信(包装紙さんの記事)
    > TextBoxは全て、Form上に配置されているものになります。

    各コントロールを操作するのは、その親フォームが担当するべきなので、
    textBoxAddress や textBoxZipCode の読み書きは Form1 上に記述すべきですし、
    textBoxName1/2 や textBoxSex の操作は Form2 にやらせるべきですね。



    No34143に返信(包装紙さんの記事)
    > Form2でボタンが押された時、このlstをForm1側に渡したいです。
    この「ボタン」というのが、Form2 を閉じるための OK ボタンなのか、
    先の No34146 で示した適用ボタンにあたるのかでも変わってきます。


    ダイアログを閉じた時に List<string> を得られれば良いのであれば、
    Form1 側から MessageBox.Show 感覚で呼べるよう、

     private void button1_Click(object sender, EventArgs e)
     {
      List<string> lst = Form2.ShowUserDialog(this);
      //
      // この後で、lst を使ってデータ検索し、
      // Form1 上にある textBoxAddress / textBoxZipCode に表示する
      //
     }

    と書けるような static メソッドを設けてしまうのも一考かも知れません。
    たとえばこんな感じです。

    public partial class Form2 : Form
    {
     public Form2()
     {
      InitializeComponent();
     }

     public static List<string> ShowUserDialog(IWin32Window owner)
     {
      using (var dlg = new Form2())
      {
       if (dlg.ShowDialog(owner) != DialogResult.OK)
       {
        // 右上 × ボタンで閉じられたら、空の List<> を返す
        return new List<string>();
       }
       else
       {
        // OK ボタンで閉じられたら、ユーザー入力値を返す
        return new List<string>
        {
         dlg.textBoxName1.Text,
         dlg.textBoxName2.Text,
         dlg.textBoxSex.Text,
        };
       }
      }
     }
    }


    上記実装の場合、Form2 上に OK ボタンを設ける必要があります。
    デザイン時に、Form2 上に OK ボタンを貼っておき、
    それの DialogResult プロパティを "OK" にしておいてください。
    (必要に応じて、キャンセルボタンも併設すると良いかも)



    No34149に返信(包装紙さんの記事)
    > Form2でSQLを実行してForm2で実行結果を取得。
    > 取得した値をForm1の各テキストボックスに入れてあげた方が
    > 簡単そうな気がしました・・・

    本質は一緒ですよね。

    データベース操作を Form1 だけに集約させるのか、それとも
    Form2 からもデータベース操作を行わせるかという違いはありますが、
    当初の質問であるデータの受け渡しという本質については変わりません。

    やるべきことは
     『Form2 のダイアログから、呼び出し元の Form1 に情報を返したい』
    という点にあるはず。

    そのときに渡すべき情報が
     ・Address 文字列
     ・ZipCode 文字列
    という「検索結果」に変わっただけでなので、最初の質問の
     ・textBox に入力された Name1 文字列
     ・textBox に入力された Name2 文字列
     ・textBox に入力された Sex 文字列
    という「ユーザー入力値な List<string>」を返す場合と同じ手順が使えるでしょう。


    今までに提案してきた『データの渡し方』としては、以下の物があります。

    ・Form2 の静的メソッドの戻り値として返すパターン(本投稿の ShowUserDialog メソッド)
    ・Form2 のインスタンスプロパティとして返すパターン( No34146 の CurrentList プロパティ)
    ・Form2 のイベント引数で返すパターン( No34144 の案1)
    ・コールバック用のデリゲートを Form1 側から Form2 に渡しておくパターン( No34144 の案2)
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[6]: リストを別フォームに渡す方法 /包装紙 返信無し
 
上記関連ツリー

Nomalアイコン リストを別フォームに渡す方法 / 包装紙 (19/02/19(Tue) 16:03) #34143
Nomalアイコン Re[1]: リストを別フォームに渡す方法 / 魔界の仮面弁士 (19/02/19(Tue) 16:26) #34144
│└Nomalアイコン Re[2]: リストを別フォームに渡す方法 / 魔界の仮面弁士 (19/02/19(Tue) 16:59) #34146
Nomalアイコン Re[1]: リストを別フォームに渡す方法 / kiku (19/02/19(Tue) 16:47) #34145
  └Nomalアイコン Re[2]: リストを別フォームに渡す方法 / 包装紙 (19/02/19(Tue) 17:31) #34147
    └Nomalアイコン Re[3]: リストを別フォームに渡す方法 / 包装紙 (19/02/19(Tue) 17:40) #34148
      └Nomalアイコン Re[4]: リストを別フォームに渡す方法 / 包装紙 (19/02/19(Tue) 17:41) #34149
        └Nomalアイコン Re[5]: リストを別フォームに渡す方法 / 包装紙 (19/02/19(Tue) 17:43) #34150
          └Nomalアイコン Re[6]: リストを別フォームに渡す方法 / 包装紙 (19/02/19(Tue) 17:46) #34151
            └Nomalアイコン リストを別フォームに渡す方法 / 魔界の仮面弁士 (19/02/20(Wed) 09:26) #34152 ←Now

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -