親ウィンドウから子ウィンドウを作成。データの受け渡し。
別ウィンドウを生成して、データを入力。その情報を親へ渡すサンプルです。
親と子が1対1
準備
親ウィンドウ(Form1)
- Labelコンポーネント(label1)
- Buttonコンポーネント(button1)
子ウィンドウ(Form2)
- Buttonコンポーネント(button2)
コード
Form1クラス
using System; using System.Windows.Forms; namespace FormDataTrans { public partial class Form1 : Form { public string Msg { get => label1.Text; set => label1.Text = value; } public Form1() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { new Form2(this).ShowDialog(); } } }
コード中のプロパティは省略形です。(インテリセンスで変換可能)
省略後
public string Msg { get => label1.Text; set => label1.Text = value; }
省略前
public string Msg { get { return label1.Text; } set { label1.Text = value; } }
Form2クラス
using System; using System.Windows.Forms; namespace FormDataTrans { public partial class Form2 : Form { Form1 form1; public Form2(Form1 form1) { InitializeComponent(); this.form1 = form1; } private void Button1_Click(object sender, EventArgs e) { form1.Msg = "ボタンを押された"; } private void Form2_FormClosed(object sender, FormClosedEventArgs e) { form1.Msg = "Form2が閉じられた"; } } }
実行結果
- Form1のbutton1をクリックすると、Form2ウィンドウが作られる
- Form2のbutton1をクリックすると、Form1のlabel1の表示が「ボタンを押された」に変わる
- Form2を閉じるとForm1のlabel1の表示が「Form2が閉じられた」に変わる
親が複数、子が1
子から見て、自分を生成した親のデータを更新
準備
親1ウィンドウ(Form1)
- Labelコンポーネント(label1)
- Buttonコンポーネント(button1) Form2を生成します。
- Buttonコンポーネント(button2) Form3を生成します。
親2ウィンドウ(Form3)
- Labelコンポーネント(label1)
- Buttonコンポーネント(button1) Form2を生成します。
子ウィンドウ(Form2)
生成元フォーム(親)のLabelを変更します。
- Buttonコンポーネント(button2)
コード
インターフェース(IDummyData)
namespace FormDataTrans { interface IDummyData { string Msg { get; set; } } }
Form1クラス
using System; using System.Windows.Forms; namespace FormDataTrans { public partial class Form1 : Form, IDummyData { public string Msg { get => label1.Text; set => label1.Text = value; } public Form1() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { new Form2().ShowDialog(this); } private void Button2_Click(object sender, EventArgs e) { new Form3().Show(); } } }
Form3クラス
using System; using System.Windows.Forms; namespace FormDataTrans { public partial class Form3 : Form, IDummyData { public string Msg { get => label1.Text; set => label1.Text = value; } public Form3() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { new Form2().ShowDialog(this); } } }
Form2クラス
using System; using System.Windows.Forms; namespace FormDataTrans { public partial class Form2 : Form { IDummyData parentForm; public Form2() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { parentForm.Msg = "ボタンを押された"; } private void Form2_FormClosed(object sender, FormClosedEventArgs e) { parentForm.Msg = "Form2を閉じられた"; } private void Form2_Load(object sender, EventArgs e) { parentForm = Owner as IDummyData; } } }
実行結果
ポリモーフィズムを使って、Form2のコードを変更することなく、どのフォームからでも対応できるようにしています。
親1(Form1)の場合
- Form1のbutton1をクリックすると、Form2ウィンドウが作られる
Form2のbutton1をクリックすると、Form1のlabel1の表示が「ボタンを押された」に変わる
Form2を閉じるとForm1のlabel1の表示が「Form2が閉じられた」に変わる
親2(Form3)の場合
- Form1のbutton2をクリックすると、Form3ウィンドウが作られる
Form2のbutton1をクリックすると、Form3のlabel1の表示が「ボタンを押された」に変わる
Form2を閉じるとForm3のlabel1の表示が「Form2が閉じられた」に変わる
ディスカッション
コメント一覧
まだ、コメントがありません