如何将表单的实例传递给另一个表单
我有一个名为form1
的表单,其中包含在运行时创建的控件。
当我按下Form上的一个按钮时,另一个Form加载名为combat
而form1
被隐藏,这样只能看到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(); }