关闭子窗体时更改父窗体的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");
  }
}

它不会给出任何错误,但也不会再次排列子窗体。我还尝试使用其他参数调用该方法。

知道我该怎么做吗?

关闭子窗体时更改父窗体的LayoutMdi

这一行应该会让您暂停:

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是因为除此之外,关闭的子窗体仍包含在布局平铺中。