どの様なやり方があるのか、調べてみた。
準備
新しいプロジェクトを作成
↓
「Form1」へ
「ツールボックス」から
「Button」と「TextBox」を配置
↓
「プロジェクト」->「新しい項目の追加」
で「Windowsフォーム」を追加する。
↓
追加した「Form2」へ
「ツールボックス」から
「TextBox」を配置
↓
「Form1」のボタンをダブルクリックして、
「クリック時イベント」のコードを表示させておきます。
「Form1」からモーダルで「Form2」を呼び出す
モーダルで「Form2」を呼び出すには2つの方法があります。
普段はリソースの解放が自動で行われる「using」の方を使います。
事情により使い分けます。
2つの方法のどちらかを記述して、
一度ここ迄で実行してみましょう。
ボタンを押すと「Form2」がモーダルで実行されるはずです。
Form間でデータの受け渡しを行う
「Form1」と「Form2」の間でデータの受け渡しを行います。
「Form2」へ
「ツールボックス」から
「Button」を配置して下さい。
「Form2」の配置したボタンをダブルクリックして、
「クリック時イベント」のコードを表示させておきます。
「Form2」デザインのイベントから
「FormClosing」をダブルクリックして、
「Form終了時イベント」のコードを表示させておきます。
↓
準備が出来たので、
Form間でのデータ受け渡しの
いくつかのパターンを記載します。
●パターンA
「Form2」側で「Form1」のインスタンスを取得して、「Form1」の持っているデータの取得や設定をしたいので、
以下のようにします。
これで実行してみて下さい。
Form間でデータの受け渡しができるハズです。
このパターンAの方法だと、
「Form1」に自身のインスタンスの格納用メンバを用意して、
それに対してstaticを適用しています。
1つの「Form1」しか同時に使用しない場合はこれで大丈夫ですが、
複数の「Form1」のインスタンスを同時に使用する場合、
インスタンスの格納用メンバがstaticの為、
クラス内でstatic部分が共有されてしまい、
うまく動きません。
ですが、
普通は同一Formを複数同時に使う事はないので、
これでも問題ありません。
●パターンB
「Form1」から「Form2」をnewする際に「Form1」のインスタンスを「Form2」へ
引数として渡す事により、
「Form2」から
「Form1」の持っているデータの取得や設定をしたいので、
以下のようにします。
パターンAと比べると、
「Form1」からstaticが無くなり、
いくらかすっきりしました。
Form間のデータ受け渡し内容がシンプルな物であれば、
このパターンを使用するのがよさそうです。
これなら複数Formのインスタンスを作らなくては
いけない場合でも問題無く動きそうです。
●パターンC
「Form2」側に自身でダイアログを生成して、表示させる自家製メソッドをstaticで用意。
引数と戻り値にリストを使用する事により、
フォーム間でデータの受け渡しを行います。
「Form1」側は「Form2」へ渡したいデータをリスト化し、
「Form2」自家製メソッドを引数付きで呼びます。
「Form2」のフォーム表示後、戻り値のリストを取り出し、
「Form1」内で利用します。
受け渡したいデータが増えても、
「Form1」側に無駄にpublicが増えず、
格納するデータの順番さえちゃんと管理できれば楽そうです。
「Form2」自身で自分のインスタンスの生成、表示をやってくれるので
「Form1」側から見たときに、使いやすそうです。
0 件のコメント:
コメントを投稿