ページ 1 / 1
C#でForm1からForm2を開き・・・
Posted: 2012年7月24日(火) 22:00
by 雨ガエル
C#でForm1からForm2をShowDialog(this)で開き、
Form2が閉じる時にForm2のtextBoxのTextプロパティを取得したいです。
今のところこういうかんじです。
コード:
//Form1
Form2 f2=new Form2();
public string TEXT;
private void button1_Click(object sender, EventArgs e)
{
f2.ShowDialog(this);
}
//Form2
private void button1_Click(object sender, EventArgs e)
{
Form1 f1=new Form1();
f1.TEXT=textBox1.Text;
this.Close(); //Form2を閉じる
}
Form2からForm1へ値を渡すにはどうしたらいいのでしょうか。
Re: C#でForm1からForm2を開き・・・
Posted: 2012年7月24日(火) 23:36
by YuO
FormをCloseしただけでは,テキストボックスは破棄されません。
なので,
- Form2にtextBox1.Textを返すプロパティを用意する
- Form1側でShowDialogから戻ってきた時に,Form2の,先のプロパティを使って必要な設定を行う
ことで実現可能です。
つまり,Form2からForm1へ値を渡すのではなく,Form1がForm2の値を取得します。
# or Form2にForm1のインスタンスを渡しておいて,Form2がForm1のメソッドを呼び出すのも可。
この手の質問はよくあるのですが,他のフォームのコントロールは直接触らず,専用のプロパティを通じて取得するのが基本です。
さらに言うなら,専用のオブジェクトを介してデータはやりとりし,フォームのプロパティすら使わないのが理想です。
# ModelとPresentationを分離するのは本来基本的な事項なのですが……。
Re: C#でForm1からForm2を開き・・・
Posted: 2012年7月25日(水) 11:29
by バグ
とりあえず・・・ですが、こんな感じですかね。
コード:
// Form1
public string TEXT;
private void button1_Click(object sender, EventArgs e)
{
using (Form2 f2 = new Forms2())
{
f2.TEXT = TEXT; // ※Form1のTEXTの値でForm2のTEXTを初期化したい場合にはこの行を追加すること
f2.ShowDialog();
TEXT = f2.TEXT;
}
}
// Form2
public string TEXT
{
get { return textBox1.Text; }
set { textBox1.Text = value; }
}
private void button1_Click(object sender, EventArgs e)
{
// Form2を閉じる
Close();
}
Re: C#でForm1からForm2を開き・・・
Posted: 2012年7月25日(水) 21:29
by 雨ガエル
YuOさん、教えていただきどうもありがとうございました。
基本的なことができていなかったようです。
アドバイスをいただいてコードを直してちゃんと動きました。
ありがとうございました。今後ともよろしくお願いいたします。
Re: C#でForm1からForm2を開き・・・
Posted: 2012年7月25日(水) 21:58
by 雨ガエル
バグさん、詳しい回答ありがとうございました。
とても参考になりました。
本当にありがとうございました。