2

別のフォームからのデータを必要とするプログラムがあり、最初のフォームの新しいインスタンスを作成せずに渡す必要があります。どうやってやるの?

元。

Form2 f2 = new Form2();

f2.showdialog();

f2 が表示されると、アイテムを含むリストビューが表示されます。アイテムをクリックすると、フォーム 2 を閉じたり、新しいフォーム 1 をインスタンス化したりせずに、アイテムを最初のフォームに送り返す必要があります。

4

4 に答える 4

1

最初のフォームの新しいインスタンスを作成せずに渡す必要があります。

つまり、最初のフォームがバックグラウンドで開かれています。プロパティを使用Application.OpenFormsして、既に開いているフォームを取得し、そこからデータを取得できます。何かのようなもの:

Form2 f2 = Application.OpenForms["Form2"] as Form2;
if(f2 != null)
   string data = f2.SomeProperty;
于 2013-02-27T12:25:38.747 に答える
1

あなたはある種のイベントを探しています。

public event EventHandler MyButtonClicked;

ShowDialog(); を使用する前に。

Form2 f2 = new Form2();
f2.MyButtonClicked += f2_MyButtonClicked;
f2.showdialog();

そして、イベントを処理する場所

void f2_MyButtonClicked(object sender, EventArgs e)
{
    //Here you want to grab your list. You can get f2 from sender.
    Form2 f2 = (Form2)sender;

    throw new NotImplementedException();
}

Form2 でボタンをクリックすると、イベントが発生します。

void myButtonClicked(object sender, EventArgs e)
{
    if (MyButtonClicked != null)
    {
        MyButtonClicked(this, new EventArgs()); 
    }
}

イベントの詳細を読みたい場合は、こちらをご覧ください。

http://msdn.microsoft.com/en-us/library/aa645739%28v=vs.71%29.aspx

于 2013-02-27T12:26:10.127 に答える
0

おそらく最も簡単な方法はForm1、新しいアイテムの処理方法を知っている、公的にアクセス可能なメソッドを用意することです。次に、オブジェクトForm2への参照がありForm2ます。Form2そのためのプロパティがあるか、親として設定します(Form1またはForm2 f2 = new Form2(f1)thisf1から呼び出す場合)。

Form1オブジェクトへの参照ができたので、そのメソッドを呼び出してアイテムを処理できます。

于 2013-02-27T12:32:55.567 に答える
0

おそらく、form1 に mutator(set) メソッドを作成します。form1 にデータを戻したい場合は、mutator メソッドを呼び出してフォームを更新します。

于 2013-02-27T12:25:44.990 に答える