最良のオプションは、Form2でイベントを作成し、Form1でそのイベントをサブスクライブすることだと思います。Form2で何かを行うとき(たとえば、ユーザーがボタンをクリックするとき)、そのイベントを発生させます(イベント引数としていくつかのパラメーターを渡すこともできます)。
フォーム1:
private void StartForm2Button_Click(object sender, EventArgs e)
{
Form2 form2 = new Form2();
form2.SomethingHappened += Form2_SomethingHappened;
form2.Show();
}
private Form2_SomethingHappened(object sender, EventArgs e)
{
Form2 form2 = (Form2)sender;
string data = form2.Data;
// create node
AddNode(node);
}
Form2:
public event EventHandler SomethingHappened;
public string Data
{
get { return textBoxData.Text; }
}
private void SomeButton_Click(object sender, EventArgs e)
{
if (SomethingHappened != null)
SomethingHappened(this, EventArgs.Empty);
}
したがって、他の2つの異なるフォームから作成されたフォームを更新Form2
すると、イベントをサブスクライブするための別の方法が必要になります。form2は、アプリケーションで開いたフォームコレクションから取得できます。または、フォーム間でいくつかの共通オブジェクトを共有できます。
public class Model
{
public event Action<string> DataAdded; // subscribe to this event in form1
public void AddData(string data) // call this method in form2
{
if (DataAdded != null)
DataAdded(data);
}
}
さて、最高の世界では、すべてのデータを含むモデルを作成し、そのモデルの状態をに反映しましたForm1
。