Win フォームアプリでフォーム間のデータ受け渡し
Windwosフォームアプリは、それぞれがクラスで管理されています。そして、実際に画面に表示する時には、インスタンスを作成することで実現します。
サンプルの作成

フォームを作成する
新規プロジェクトを作成します。
プロジェクト名 FormTransData
空のフォーム(Form1,Form2)を2つ作成します
ソリューションエクスプローラでプロジェクトを右クリックして、新しくフォームを追加
Form1にボタンを1つ追加します。(button1)
ツールボックスからForm1にD&Dして追加
ボタン追加によってコードが自動的に作成されていることを確認します。
// 名前空間は簡略化しています
Button button1;
button1 = new Button();
button1.Location = new Point(392, 305);
button1.Name = "button1”;
button1.Size = new Size(195, 79);
button1.TabIndex = 0;
button1.Text = "button1";
button1.UseVisualStyleBackColor = true;
button1.Click += new EventHandler(this.button1_Click);
Controls.Add(button1);
ボタンを押下するとForm2が表示されるコードを記述します
button1のクリックイベントを作成します。
- Form2のインスタンスを作成して、form2変数に代入します
- Show()メソッドで画面に表示するようにします。
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.Show();
}
新しいフォームが表示されることを確認
プログラムを実行します。
- Form1のボタンをクリックします。
- Form2が表示されることを確認します。
Form2からForm1へのデータ受け渡し(Form1側で取得)
Form2側作業
受け渡し用の元データを作成します。
Form2のフィールドで宣言、代入します。
public int form2Point = 200;
Form1側作業
Form1のボタンクリックイベントにデータの受け取りを追記します。
int point = form2.form2Point;
結果をボタンに表示するコードを追記します。
button1.Text = point.ToString();
プログラムを実行します。
- ボタンをクリックします。
- Form2のデータが表示されていることを確認します。
Form1からForm2へのデータ受け渡し(Form2側で取得)
Form1側作業
受け渡し用の元データを作成します。
Form1のフィールドで宣言、代入します。
public int form1Point = 100;
Form2は Form1のインスタンスを知らないため、取得する処理を追加します。
具体的には、Form2のインスタンスが作成されるタイミングで、Form1のインスタンスを取得する(Form1から渡す)ようにします。
Form2のインスタンス作成の変更
自分自身(インスタンス)をコンストラクタの引数として渡します。
Form2 form2 = new Form2(this);
Form2側作業
Form1のコンストラクタを保持しておくための変数を宣言します。
Form2のフィールドで宣言します。
private Form1 form1;
引数が1つのコンストラクタを追記します。
- コンポーネントの初期化メソッドの追記
- 渡された引数(Form1のインスタンス)をフィールドに代入するコードの追記
public Form2(Form1 form1)
{
InitializeComponent();
this.form1 = form1;
}
ボタンを追加します。(button1)
ツールボックスからForm2にD&Dして追加
ボタンクリックイベントにデータの受け取りを追記します。
int point = form1.form1Point;
結果をボタンに表示します。
button1.Text = point.ToString();
プログラムを実行します。
- Form1のボタンをクリックします。
- ボタンにForm2のデータが表示されているのを確認します。
- Form2のボタンをクリックします。
- ボタンにForm1のデータが表示されているのを確認します。
- Form1のボタンを押下するたびに新しいForm2のインスタンスが作成されることを確認します。
サンプルコード
using System;
using System.Windows.Forms;
namespace FormTransData
{
public partial class Form1 : Form
{
public int form1Point = 100;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2(this);
form2.Show();
int point = form2.form2Point;
button1.Text = point.ToString();
}
}
}
using System;
using System.Windows.Forms;
namespace FormTransData
{
public partial class Form2 : Form
{
private Form1 form1;
public int form2Point = 200;
public Form2()
{
InitializeComponent();
}
public Form2(Form1 form1)
{
InitializeComponent();
this.form1 = form1;
}
private void button1_Click(object sender, EventArgs e)
{
int point = form1.form1Point;
button1.Text = point.ToString(); ;
}
}
}
ディスカッション
コメント一覧
まだ、コメントがありません