if (fMain==null)  //判断某窗口是否已经存在
{
   fMain =new MainForm(); //不存在就NEW一个
   fMain.Show();
}
else
   fMain.Show();  //存在就SHOW

解决方案 »

  1.   

    不行啊!你着个方法不行啊!! 我测试了的! 我改成:Form3 frmnew=new Form3();
    if (frmnew==null)  //判断某窗口是否已经存在
    {
    frmnew=new Form1(); //不存在就NEW一个
    frmnew.Show();
    }
    else
    frmnew.Show();  //存在就SHOW
    FORM3是新窗体,FORM1是主窗体!可是运行起来:
    Form1.cs(167): 无法将类型“窗体调用.Form1”隐式转换为“窗体调用.Form3”
    怎么回事呢? 
      

  2.   

    代码如下:
    foreach(Form f in this.MdiChildren)
    {
    if (f is ChildForm)
    {
    f.Focus();
    f.WindowState = FormWindowState.Maximized;
    return;
    }
    }
      

  3.   

    对还要加下人else
    就new 一个新的
    ChildForm frmGiBase = new ChildForm();
    frmGiBase.WindowState = FormWindowState.Maximized;
    frmGiBase.MdiParent = this;
    frmGiBase.Show();
      

  4.   

    ....NO!! 我的意思是不想在MDI中这样啊! 就是一般的窗体中,不重复显示!而且我发现连接数据库时也不能这样啊,要不然就会出错!怎么解决非MDI窗体的重复显示问题呢??
      

  5.   

    /*方法1:*/ArrayList popupForms=new ArrayList;
    //...
    Form1 form=new Form1();
    popupForms.Add(form);
    //...
    foreach(Form form in popupForms)
    {
       if(...)
     //....
    }
    /*方法2*/
    public Form2:Form
    {
    private static bool createCount=0;
    public static int InstatceCount
    {
    get { return createCount;}

    public Form2()
    {
    //....
    createCount++;
    }
    ~Form2()
    {
    createCount--;
    }
    }
      

  6.   

    ...........楼上的兄弟.....非常感谢你啊!但是你能不能写清楚一点呢!!比如IF(...),还有注释啊! 我才学C#啊~~~~~~帮帮忙啊!
      

  7.   

    ArrayList forms=new ArrayList();
    private void toolBar1_ButtonClick(object sender, System.Windows.Forms.ToolBarButtonClickEventArgs e)
    {
    if (e.Button.Text.ToString().Trim()=="商品编码") 
    {   
    MessageBox.Show(this.forms.Count.ToString());
    int i=0;
    foreach(System.Windows.Forms.Form tform in this.forms)
    {
    if (tform.ToString()=="WindowsApplication4.Form2, Text: Form2")
    {
    MessageBox.Show("子窗体已经生成,不能再生成");
    break;
    }
    else
    {
    if (i==0) 
    {
    i=1;
    Form2 myform2=new Form2();
    this.forms.Add(myform2); 
    //MessageBox.Show(myform2.ToString() );
    myform2.Show();

    }
    }
    }
    }
      

  8.   

    这段代码就是将你的代码中的this.MdiChildren集合用
    this.forms(见ArrayList forms=new ArrayList();)
    代替了。
      

  9.   

    你先类中声明一个form 
    Form1 frm;然后在你的触发事件中这样写
    if(frm!=null)
    {
        if(frm.IsDisposed)
       {
    frm.Dispose();
    frm=new New();
    frm.MdiParent=this;
        }
        frm.Show();
    }
    else
    {
        frm=new New();
        frm.MdiParent=this;
        frm.Show();
    }
    这样就可以解决这个问题,我已经试过了!
      

  10.   

    如果不是MDI 窗体的,就把这一句
    frm.MdiParent=this;
    去掉!
      

  11.   

    谢谢我还想问一下:
    frm=new New();中的New是指的哪个窗体?
      

  12.   

    不好意思,New() 是我写错了,
    将New() 改为form1() 就可以了!
      

  13.   

    如果改成FORM1,编译通不过的!
    不过我是这样改的!
    private Form3 frm;if(frm!=null)
    {
    if(frm.IsDisposed)
    {
    frm.Dispose();
    frm=new Form3();
    frm.Owner=this; //激活FORM3,使之处于最前
    //frm.MdiParent=this;
    }
    frm.Show();
    }
    else
    {
    frm=new Form3();
    //frm.MdiParent=this;
    frm.Show(); }这样就完全正常了! ;)