我现在有这样的程序,cs 架构的,有form1,form2,form3,form4 4个窗体,主窗体是form1,程序打开form1后点击上面按钮打开form2 ,隐藏form1, 在form2上点击一个按钮后打开form3,隐藏form2 ,form3也是一样道理,每个窗体都可以点击相应窗体下的按钮直接返回form1.因为某个接口的特殊性,不能每次打开窗体都
form2 fr2 = new form2() 这样来一下,不知道有什么好的方法,最好有个简单的举例.

解决方案 »

  1.   

    form2 fr2 = new form2();放在最外边
    void open()
    {
    fr2.Show();
    }
    void close()
    {
    fr2.Hide();
    }
      

  2.   


    //在Form1里声明类成员
    Form2 form2;//在button_click事件里写入以下代码
    if(form2!=null)
    {
       this.hide();
       form2.Show();
    }
    else
    {
       this.hide();
       form2=new Form2();
       form2.Show();
    }
    这样只需要第一次打开的时候New一次就可以了,在form2里返回form1的时候不要关闭form2,隐藏就可以
      

  3.   

    最好把Form1设计成Mdi,其他的窗体把MdiParent指向Form1,这样可能会好些
      

  4.   

    那在fr2返回到fr1的时候,fr1不是又要new 一下了,要不把fr2隐藏后,如果让fr1显示出来.
      

  5.   

    Form1    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            Form2 f2 = null;
            private void Form1_Load(object sender, EventArgs e)
            {
                f2 = new Form2(this);
            }        private void button1_Click(object sender, EventArgs e)
            {
                if (f2.IsDisposed)
                {
                    /*有多个的话,根据条件判断是生成哪个form*/
                    f2 = new Form2(this);
                }
                f2.Show();
                this.Hide();
            }    }
    Form2public partial class Form2 : Form
        {
            Form1 f1 = null;
            public Form2(Form1 _f1)
            {
                InitializeComponent();
                f1 = _f1;
            }        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                e.Cancel = true;
                
                f1.Show();
                this.Hide();
            }
        }