你就把第二个form直接付给win不久可以了

解决方案 »

  1.   

    你在第一个窗口中定义Window2 win = new Window2(),
    调用win.show()显示Window2 需要刷新的时候,仍然调用win.show(),就可以了,并不会增加新的窗口
      

  2.   

    参考这个问题,已经解决:如何在MDI中只创建一个子窗口(就是一个窗体只能创建一个实例_),当一个子窗口已存在的话,只是激活它!
    http://expert.csdn.net/Expert/TopicView3.asp?id=830880
      

  3.   

    上面的贴子里说得很清楚,真佩服班门斧,还记着贴子的URL.
      

  4.   

    我觉得版主提的帖子中CForce说的方法是比较正宗的,一些名家手笔也这样来使用静态变量。
    具体代码如下:
    修改子窗体的构造函数和Dispose函数
    public class Form2 : System.Windows.Forms.Form
    {
    public static int nInstance=0;//静态变量,表示目前打开的Form2的数量
    public Form2()
    {
    Form2.nInstance++;//改动
    InitializeComponent();
    }
    protected override void Dispose( bool disposing )
    {
    if( disposing )
    {
    if(components != null)
    {
    components.Dispose();
    }
    }
    base.Dispose( disposing );
    Form2.nInstance--;//改动
    }
    }在主窗体中的代码:
    private void newForm2()
    {
    if (Form2.nInstance<=0)
    {
    Form2 frm=new Form2();
    frm.MdiParent=this;
    frm.Show();
    }
    else
    {
    foreach (Form frm in this.MdiChildren)
    {  
    if (frm.GetType()==typeof(Form2))
    {
    frm.Show();   
    frm.BringToFront();
    }
    }
    }
    }
      

  5.   

    采用singleton设计模式不就都搞定了吗?
      

  6.   

    看了dy_2000_abc(芝麻开门)开门的帖子,深有感触啊.想起了一句广告,没有最好,只有更好.(不敢说下面的解决办法是更好,CForce从名字上看就是那种杀伤力极强). 只是想了一个新办法,大家试一试.
    优点:简单,实用.使用面广.
    缺点,大家帮着看看,如果可行以后就用这个回答问题了. :)思路是这样,判断MDI Parent的MdiChildren,看看是否已经有这个实例了.
    代码如下,假设我们想打开一个Form2,这段代码是在MDI Parent Form中:foreach(Form f in this.MdiChildren)
    {
    if (f.GetType() == typeof(Form2)) f.Show();
    return;
    } Form2 f2 = new Form2();
    f2.MdiParent = this;
            f2.Show();
      

  7.   

    在主窗体中:
    Form2 form2=null;在创建子窗体时:
    if(form2!=null)
    {
    form2.close();
    form2=null;
    }
    form2=new Form2();我发现用for2.dispose后还能调用form2的属性值;
    用上面这个方法比较保险,我觉得.