別のフォームからのデータを必要とするプログラムがあり、最初のフォームの新しいインスタンスを作成せずに渡す必要があります。どうやってやるの?
元。
Form2 f2 = new Form2();
f2.showdialog();
f2 が表示されると、アイテムを含むリストビューが表示されます。アイテムをクリックすると、フォーム 2 を閉じたり、新しいフォーム 1 をインスタンス化したりせずに、アイテムを最初のフォームに送り返す必要があります。
最初のフォームの新しいインスタンスを作成せずに渡す必要があります。
つまり、最初のフォームがバックグラウンドで開かれています。プロパティを使用Application.OpenForms
して、既に開いているフォームを取得し、そこからデータを取得できます。何かのようなもの:
Form2 f2 = Application.OpenForms["Form2"] as Form2;
if(f2 != null)
string data = f2.SomeProperty;
あなたはある種のイベントを探しています。
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
おそらく最も簡単な方法はForm1
、新しいアイテムの処理方法を知っている、公的にアクセス可能なメソッドを用意することです。次に、オブジェクトForm2
への参照がありForm2
ます。Form2
そのためのプロパティがあるか、親として設定します(Form1
またはForm2 f2 = new Form2(f1)
、this
f1から呼び出す場合)。
Form1
オブジェクトへの参照ができたので、そのメソッドを呼び出してアイテムを処理できます。
おそらく、form1 に mutator(set) メソッドを作成します。form1 にデータを戻したい場合は、mutator メソッドを呼び出してフォームを更新します。