C#でForm1からForm2を開き・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
雨ガエル

C#でForm1からForm2を開き・・・

#1

投稿記事 by 雨ガエル » 11年前

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へ値を渡すにはどうしたらいいのでしょうか。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: C#でForm1からForm2を開き・・・

#2

投稿記事 by YuO » 11年前

FormをCloseしただけでは,テキストボックスは破棄されません。
なので,
  • Form2にtextBox1.Textを返すプロパティを用意する
  • Form1側でShowDialogから戻ってきた時に,Form2の,先のプロパティを使って必要な設定を行う
ことで実現可能です。
つまり,Form2からForm1へ値を渡すのではなく,Form1がForm2の値を取得します。
# or Form2にForm1のインスタンスを渡しておいて,Form2がForm1のメソッドを呼び出すのも可。

この手の質問はよくあるのですが,他のフォームのコントロールは直接触らず,専用のプロパティを通じて取得するのが基本です。
さらに言うなら,専用のオブジェクトを介してデータはやりとりし,フォームのプロパティすら使わないのが理想です。
# ModelとPresentationを分離するのは本来基本的な事項なのですが……。

アバター
バグ
記事: 130
登録日時: 13年前
住所: 愛媛県
連絡を取る:

Re: C#でForm1からForm2を開き・・・

#3

投稿記事 by バグ » 11年前

とりあえず・・・ですが、こんな感じですかね。

コード:

// 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を開き・・・

#4

投稿記事 by 雨ガエル » 11年前

YuOさん、教えていただきどうもありがとうございました。
基本的なことができていなかったようです。
アドバイスをいただいてコードを直してちゃんと動きました。
ありがとうございました。今後ともよろしくお願いいたします。

雨ガエル

Re: C#でForm1からForm2を開き・・・

#5

投稿記事 by 雨ガエル » 11年前

バグさん、詳しい回答ありがとうございました。
とても参考になりました。
本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る