我认为最好的选择是在 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);
}
表格2:
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);
}
因此更新您所说的,从其他两种不同的表单创建的表单,那么您需要其他方式来订阅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
.