1. はじめに
- C#のWindows Formsアプリでフォーム間でデータをやり取りしたい
- フォーム間でデータをやり取りする方法を調べておきたい
2. 開発環境
- C#
- .NET 8
- Visual Studio 2022
- Windows 11
3. コンストラクタを使用する方法
新しいフォームを作成するときに、コンストラクタの引数としてデータを渡す
手順
- 1 . フォームのコンストラクタを修正
- 2 . データを受け取って表示
サンプルコード
Form1(データを送る側)
Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
string data = txtInput.Text; // テキストボックスの内容を取得
Form2 form2 = new Form2(data); // データを渡してForm2を作成
form2.Show();
}
Form2(データを受け取る側)
Form2.cs
public partial class Form2 : Form
{
public Form2(string receivedData)
{
InitializeComponent();
lblReceivedData.Text = receivedData; // ラベルに受け取ったデータを表示
}
}
4. プロパティを使用する方法
フォームのプロパティを使ってデータを渡す方法
サンプルコード
Form1(データを送る側)
Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.ReceivedData = txtInput.Text; // プロパティを設定
form2.Show();
}
Form2(データを受け取る側)
Form2.cs
public partial class Form2 : Form
{
public string ReceivedData { get; set; } // データを格納するプロパティ
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
lblReceivedData.Text = ReceivedData; // ラベルにデータを表示
}
}
5. 静的変数を使用する方法
グローバルなデータとして、静的変数を使ってやり取りする方法
サンプルコード
データを共有するクラス
DataStore.cs
public static class DataStore
{
public static string SharedData { get; set; }
}
Form1(データを送る側)
Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
DataStore.SharedData = txtInput.Text; // データを設定
Form2 form2 = new Form2();
form2.Show();
}
Form2(データを受け取る側)
Form2.cs
private void Form2_Load(object sender, EventArgs e)
{
lblReceivedData.Text = DataStore.SharedData; // ラベルにデータを表示
}
6. イベントを使用する方法
データを受け取る側のフォームでイベントを定義し、送る側のフォームがイベントを起動する方法
サンプルコード
Form1(データを送る側)
Form1.cs
private void btnOpenForm2_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.DataReceived += (data) => { lblStatus.Text = data; }; // イベントハンドラを設定
form2.Show();
}
Form2(データを受け取る側)
Form2.cs
public partial class Form2 : Form
{
public event Action<string> DataReceived;
public Form2()
{
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
DataReceived?.Invoke("Form2が開かれました");
}
}
7. 参考文献