废话不说, 先贴代码
private void tsBtnDvd_Click(object sender, EventArgs e)
        {
            DVDManagerForm dvdManagerForm = new DVDManagerForm();
            dvdManagerForm.MdiParent = this;
            dvdManagerForm.Show();
        }
这样打开窗口有一个弊端就是.. 当打开一个窗口的时候会继续弹出来, 一直点一直弹.所以就造成了泛滥.. 我原先想法是把
DVDManagerForm dvdManagerForm = new DVDManagerForm(); 放置到方法的外边..但是C#直接就给把资源释放了.. 我直接晕菜.. 有什么好的方法让它值弹出一次..
另外再解决一个问题: 我发现C#释放资源的时候并没有完全释放. 只是把堆里的释放了..有没有办法把释放的资源重新回收回来!!!

解决方案 »

  1.   

    先For each检查下有没有这个名字的窗体,如果有说明已经打开,则Show该窗体.否则就NEW一个新的出来.
      

  2.   

    定义一个static int count=0;
    当弹出来一个得窗体的时候吧 count=1
    关闭的时候吧count=0
    这样当点击事件的时候判断下count==0
    如果等于的话 就让他show()出来
    不等于的话就不执行下面的代码
    这样就可以控制了 扩展也很方便 如果你只让show()出来两个窗体
    你可以判定 count<2这样 来做就可以 自己试验下
      

  3.   

    For each fm as form in me.openforms
      

  4.   


    //主窗体中:
    public static DVDManagerForm dvdManagerForm;private void tsBtnDvd_Click(object sender, EventArgs e)
    {
        if(dvdManagerForm == null)
        {
            dvdManagerForm.MdiParent = this;
            dvdManagerForm.Show();
        }
        else
        {
            dvdManagerForm.Activate();
        }
    }//注意在DVDManagerForm的Form_Closing事件中:
    主窗体.dvdManagerForm = null;
      

  5.   

    防止多次实例化
    private bool _IsExistChildForm(string _ChildFormName) 

    foreach(Form form in this.MdiChildren) 

    if(string.Compare(form.Name, _ChildFormName, true) == 0) 

    form.BringToFront(); 
    return true; 


    return false; 


    private void Judge()

    int Children_Count=this.MdiChildren.Length;
    for(int i=0;i<Children_Count;i++)
    {
    if(this.MdiChildren[i].WindowState==FormWindowState.Maximized )
    this.MdiChildren[i].WindowState=FormWindowState.Normal;
    }
    }
    private  bool GetInstanceState(string Frm_Name)
    {
    this.Judge();
    int Children_Count=this.MdiChildren.Length;
    for(int i=0;i<Children_Count;i++)
    {
    if (this.MdiChildren[i].Name==Frm_Name )

    this.MdiChildren[i].WindowState=System.Windows.Forms.FormWindowState.Normal;
    this.MdiChildren[i].Focus();
                        return true;
    }
    }
    return false;
    }