次のコードで Form1 から Form2 にデータを転送できます。
Form2 frm2 = new Form2();
frm2.textBox1.Text = listBox1.SelectedItem.ToString();
frm2Show();
今、新しいインスタンスを作成せずに Form1 にデータを送り返したいのですが、どうすれば可能ですか?
1 つの方法は、プロパティを に追加し、コンストラクターで Form1
のインスタンスを渡すことForm1
です。のプロパティにアクセスして、データを設定できます。ただし、これは と を密接に結び付けており、これは悪いことかもしれません。Form2
Form2
Form1
Form1
Form2
これを行うためのより良い方法は、サブスクライブするevent
とカスタム イベント ハンドラーを宣言することです。カスタム イベント ハンドラには、送り返すデータを含むプロパティを含めることができます。 Form2
Form1
Form1
フォーム2:
public event EventHandler<Form2EventArgs> Form2Event;
public class Form2EventArgs : EventArgs
{
// for illustration only:
// do NOT use `object` and to NOT call it `Data`
public object Data {get;set;}
}
Form1 のイベント リスナー:
private void GetData(object sender, Form2EventArgs args)
{
object data = args.Data;
// do something with the data
}
イベントへのサブスクライブ:
Form2 form2 = new Form2();
form2.Form2Event += GetData;
イベントの発生:
object data = /// blah
if(Form2Event != null)
Form2Event(this, new Form2EventArgs {Data = data});