哪天看了楼主的问题,想到了用单例模式,问题是用了单例模式的话,整个MDI程序中相同的子窗体只能有一个,也就是说你的同一个MDI子窗体不管NEW多少次,一直是同一个,他的初始状态就是你上次做过修改后的保存状态,可不可以在你NEW了之后,的Load或者是Show事件中把你的状态设置为你需要的最初状态呢?我想可以。
这样的话,至少你的内存不会每NEW一次,内存就那么疯长了^-^,至于解决释放MDI的问题,我看是甭想了,没戏。
或者你试着在你关闭MDI的代码之后加上下面的代码看看,起不起作用了,上帝保佑^-^
GC.Collect();
GC.WaitForPendingFinlizers();
GC.Collect();
//***********************
如下是一位朋友实现MDI单例的代码,稍做修改就可以用了:
//***********************
其实这个问题,就是经典的23种设计模式中的单件模式(Singleton),下面用C#实现之:
首先我们有2个Windows Form,主窗体叫Form1,子窗体叫ChildForm。在主窗体中加入一Menu,用来实例化子窗体,我们在Form1.cs中写入下代码:
private static ChildForm childForm;
//静态变量,保存唯一实例
private void menuItem2_Click(object sender, System.EventArgs e)
{
ChildForm childForm = GetChildForm();
//获取子窗体对象
childForm.Show();
//显示之
}
private ChildForm GetChildForm()
{
//先后次序不能错,前一个条件用来判断是否是第一次,后一个条件用来判断子窗体是否被关闭了
if( childForm == null || childForm.IsDisposed )
{ //第一次实例化也好,被关了也好,都重新实例化
childForm = new ChildForm();
childForm.MdiParent = this;
}
return childForm;
}
//***********************