做了一个主窗口FormMain
做了二个子窗口Form1和Form2
想调用Form1,调用的时候如果Form1已经创建,则显示它,不要重新创建一个Form1窗口,怎么实现?我在实现的时候的代码:
private void fundToolStripMenuItem_Click(object sender, EventArgs e)
{
Form1 frm1 = new Form1();
frm1.MdiParent = this; 
frm1.Show();
}
每次调用都重复创建一模一样的Form1,郁闷啊,请高手指点!

解决方案 »

  1.   

    可以在Form1里写一个方法 ,创建实例,然后就不用每次都new了 ,
    Form1 frm1 = 实例,
    这样就行了 
      

  2.   

    在Form1中实现静态构造方法。(即设计模式中的单例模式)
    class Form form1
    {
        private static form1 m_instance;
        
        private form1()
        {
            //TODO...
        }
        public static Form getInstance()
        {
            if (m_instance == null)
            {
                m_instance = new form1();
            }
            return m_instance;
        }
    }private   void   fundToolStripMenuItem_Click(object   sender,   EventArgs   e)
    {
        Form1 frm1 = Form1.getInstance();
        frm1.MdiParent = this;  
        frm1.Show();
    } 下面说一下你的代码的问题。
    这里应该不适合使用单例模式,因为在frm1.Show();后面应该写上frm1.Dispose();即frm1被关闭后应该释放而不是保留在内存中。
      

  3.   

     public bool checkChildFrmExist(string childFrmName)
            {
                foreach (Form childFrm in this.MdiChildren)
                {
                    if (childFrm.Name == childFrmName)
                    {
                        if (childFrm.WindowState == FormWindowState.Minimized)
                        {
                            childFrm.WindowState = FormWindowState.Normal;
                        }
                        childFrm.Activate();
                        return true;
                    }
                }
                return false;
            }private   void   fundToolStripMenuItem_Click(object   sender,   EventArgs   e) 

                if (this.checkChildFrmExist("Form1"))
                {
                    return;
                }
                Form1   frm1   =   new   Form1(); 
               frm1.MdiParent   =   this;   
               frm1.Show(); 

      

  4.   

    受asdf311 指点:做了一个主窗口FormMain 
    做了一个子窗口FormFund
    想调用FormFund,调用的时候如果FormFund已经创建,则显示它,不要重新创建一个FormFund窗口,实现如下,看看有没有什么不妥的地方?
    我试了几下没有报错。    public partial class FormMain : Form
        {
            public FormMain()
            {
                InitializeComponent();
            }        private void fundToolStripMenuItem_Click(object sender, EventArgs e)
            {   
                FormFund frmFund = FormFund.getInstance();
                frmFund.MdiParent = this;
                frmFund.Show();
            }
        }    public partial class FormFund : Form
        {
            static public FormFund m_instance = null; 
     
             public FormFund()
            {
                InitializeComponent();
            }        public static FormFund getInstance()
            {
                if (m_instance == null)       
                {
                    m_instance = new FormFund();
                }
                return m_instance;
            }        private void FormFund_FormClosed(object sender, FormClosedEventArgs e)
            {
                m_instance = null; //关闭子窗口FormFund后要把m_instance置空,否则报错,???
            }    }
      

  5.   

    传递一个参数,是FORM1独有的,在创建里面加入判断语句,IF这个存在,则return。