关闭子窗体时更改父窗体的LayoutMdi
本文关键字:窗体 LayoutMdi | 更新日期: 2023-09-27 18:24:13
我目前正在处理表单和mdi。在我的项目中,有一个主窗体(mdiContainer),它可以有x个子窗体。我想达到,每次,一个子窗体关闭,所有其他子窗体重新排列。
你可以把这个写进主窗体:
public void resetToolStripMenuItem_Click(object sender, EventArgs e)
{
this.LayoutMdi(System.Windows.Forms.MdiLayout.TileVertical);
}
在子表单中,我这样做:
private void subform_FormClosed(object sender, FormClosedEventArgs e)
{
try
{
Form1 mainform = new Form1();
mainform.resetToolStripMenuItem_Click(mainform, EventArgs.Empty);
}
catch
{
System.Windows.Forms.MessageBox.Show("error");
}
}
它不会给出任何错误,但也不会再次排列子窗体。我还尝试使用其他参数调用该方法。
知道我该怎么做吗?
这一行应该会让您暂停:
Form1 mainform = new Form1();
您创建了一个新表单,因此没有引用现有表单。
但我认为尝试从儿童形式做到这一点存在问题。
可能最好从MDIPparent听孩子的Closed事件,如下所示:
ChildForm childForm = new ChildForm();
childForm.FormClosed += childForm_FormClosed;
childForm.MdiParent = this;
childForm.Show();
然后在Closed方法中,调用代码:
void childForm_FormClosed(object sender, FormClosedEventArgs e) {
this.BeginInvoke(new Action(() => {
resetToolStripMenuItem_Click(null, null);
}));
}
我使用BeginInvoke是因为除此之外,关闭的子窗体仍包含在布局平铺中。