如何将表单的实例传递给另一个表单

我有一个名为form1的表单,其中包含在运行时创建的控件。

当我按下Form上的一个按钮时,另一个Form加载名为combatform1被隐藏,这样只能看到1个表单( combat )。

当我在combat按下一个按钮时,我想要显示我的form1表格。 但是我无法访问它。

这是我尝试过的:

  private void combatBtn_Click(object sender, EventArgs e) { Form combat = new Combat(this); this.Hide(); combat.Show(); } public partial class Combat : Form { public Combat(Form form) { InitializeComponent(); form.Show(); } private void button1_Click(object sender, EventArgs e) { form.Show(); } } 

 public partial class Combat : Form { private form1 form; // Or whatever class you form1 is supposed to be public Combat(Form form) { InitializeComponent(); this.form = form; } private void button1_Click(object sender, EventArgs e) { form.Show(); } } 

您需要将父表单存储在一个字段中,以便您可以在构造函数外部访问它。

通常不建议将父表单的实例传递给子表单。 在这种情况下(通常是这样),当您不这样做时,代码实际上更简单:

 private void combatBtn_Click(object sender, EventArgs e) { Form combat = new Combat(); this.Hide(); combat.ShowDialog(); this.Show(); } 

如果您需要在子表单关闭之前显示父表单,则可以通过以下事件执行此操作:

Combat添加:

 public event Action MyEvent; //TODO rename to a meaningful name 

在按钮单击处理程序中触发事件:

 private void button1_Click(object sender, EventArgs e) { MyEvent(); } 

然后让你的主表单为事件添加一个处理程序:

 private void combatBtn_Click(object sender, EventArgs e) { Combat combat = new Combat(); this.Hide(); combat.MyEvent += () => this.Show(); combat.Show(); }