在窗体关闭时布局剩余的窗体
本文关键字:窗体 布局 | 更新日期: 2023-09-27 18:16:58
我有一个MdiParent,它打开一个表单的多个实例作为它的mdichild。当每个表单打开时,我调用this.LayoutMdi(MdiLayout.TileHorizontal);
来布局所有表单。
我想做的是当窗体关闭时做同样的事情但我不能在MdiChildren的FormClosing或FormClosed事件处理程序中这样做因为它在布局表单时仍然包含封闭表单(即使它没有显示)
关于如何完成这个,也许在MdiParent中有什么想法吗?
跟踪MdiParent表单中的子窗体,然后连接一个Disposed
处理程序:
private List<Form> _childForms = new List<Form>();
protected override void OnMdiChildActivate(EventArgs e)
{
base.OnMdiChildActivate(e);
Form f = ActiveMdiChild;
if (f == null)
return;
else
{
if (!_childForms.Contains(f))
{
_childForms.Add(f);
f.Disposed += new EventHandler(childForm_Disposed);
}
}
}
private void childForm_Disposed(Object sender, EventArgs e)
{
_childForms.Remove((Form)sender);
this.LayoutMdi(MdiLayout.TileHorizontal);
}
我喜欢@DonBoitnott的回答。但是,如果您想坚持使用FormClosed()事件,那么只需在调用LayoutMdi()之前对窗体进行Dispose()处理:
void frm_FormClosed(object sender, FormClosedEventArgs e)
{
Form frm = (Form)sender;
// ... possibly do something with "frm" BEFORE it's disposed of ...
frm.Dispose();
this.LayoutMdi(MdiLayout.TileHorizontal);
}