2

次のコードで Form1 から Form2 にデータを転送できます。

Form2 frm2 = new Form2();
frm2.textBox1.Text = listBox1.SelectedItem.ToString();
frm2Show();

今、新しいインスタンスを作成せずに Form1 にデータを送り返したいのですが、どうすれば可能ですか?

4

2 に答える 2

4

1 つの方法は、プロパティを に追加し、コンストラクターで Form1のインスタンスを渡すことForm1です。のプロパティにアクセスして、データを設定できます。ただし、これは と を密接に結び付けており、これは悪いことかもしれません。Form2Form2Form1Form1Form2

これを行うためのより良い方法は、サブスクライブするeventとカスタム イベント ハンドラーを宣言することです。カスタム イベント ハンドラには、送り返すデータを含むプロパティを含めることができます。 Form2Form1Form1

フォーム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});
于 2013-09-01T05:01:36.673 に答える