フォーム間でのデータの受け渡しについてどのようにするのかという質問が多いように思われる。タイプとしては、あるフォームで入力したデータを、そのフォームが閉じた時に取得するというものと、 あるフォームを開いたままで、別のフォームが任意のタイミングで取得するというものがある。順番にサンプルコードを提示したいと思う。
1.フォームを閉じたタイミングで更新
C#
//Form2からForm3を呼び出し、Form3からForm2にデータをコピーします。
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
public string TestText
{
set
{
//テキストボックスに書き込む
this.textBox1.Text = value;
}
}
private void button1_Click(object sender, EventArgs e)
{
Form3 frm = new Form3();
//Form2をオーナーフォームに指定しておく
frm.ShowDialog(this);
}
}
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//渡したいフォームを取得
Form2 frm = this.Owner as Form2;
//渡したいデータを書き込む
frm.TestText = this.textBox1.Text;
this.Close();
}
}
VB.NET
'Form2からForm3を呼び出し、Form3からForm2にデータをコピーします。
Public Class Form2
Public WriteOnly Property TestText() As String
Set(ByVal value As String)
'テキストボックスに書き込む
Me.TextBox1.Text = value
End Set
End Property
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim frm As Form3 = New Form3()
'Form2をオーナーフォームに指定して開く
frm.ShowDialog(Me)
End Sub
End Class
Public Class Form3
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'渡したいフォームを取得
Dim frm As Form2 = CType(Me.Owner, Form2)
'渡したいデータを書き込む
frm.TestText = Me.TextBox1.Text
Me.Close()
End Sub
End Class
2.任意のタイミングで別フォームのデータを取得
C#
//Form4からForm5を呼び出し、Form5からForm4にデータをコピーします。
public partial class Form4 : Form
{
//入力するフォームの変数を用意しておく
Form5 _frm;
public Form4()
{
InitializeComponent();
_frm = new Form5();
//フォームを表示するが、モーダル表示にしてはいけない。
_frm.Show();
}
private void button1_Click(object sender, EventArgs e)
{
//データをコピーする
this.textBox1.Text = _frm.TestText;
}
}
public partial class Form5 : Form
{
public Form5()
{
InitializeComponent();
}
public string TestText
{
get { return this.textBox1.Text; }
}
}
VB.NET
'Form4からForm5を呼び出し、Form5からForm4にデータをコピーします。
Public Class Form4
'入力するフォームの変数を用意しておく
Private _frm As Form5
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
_frm = New Form5()
'フォームを表示するが、モーダル表示にしてはいけない。
_frm.Show()
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'データをコピーする
Me.TextBox1.Text = _frm.TestText
End Sub
End Class
Public Class Form5
Public ReadOnly Property TestText() As String
Get
Return Me.TextBox1.Text
End Get
End Property
End Class
