共三个界面,一个主界面,两个子界面,通过主界面进入子界面,并隐藏主界面,并通过子界面上的button返回主界面,这是会出现两个主界面,每重复一次就出现一个主界面,怎样解决啊?那位朋友可以帮我一下,谢谢

解决方案 »

  1.   


    主窗体:
    this.Visible = false;
    Form1 frm = new Form1();
    frm.ShowDialog();
    this.Visible = true;Form1:
    private void button1_Click(object sender, EventArgs e)
    {
        Close();
    }
    不优雅的做法
      

  2.   

    Program.cs
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(FrmMain.CreateMainForm());
            }主窗体:
        public partial class FrmMain : Form
        {
            private static FrmMain _Instance;        private FrmMain()
            {
                InitializeComponent();
            }        public static FrmMain CreateMainForm()
            {
                if (_Instance == null || _Instance.IsDisposed)
                {
                    _Instance = new FrmMain();
                }            return _Instance;
            }        private void button1_Click(object sender, EventArgs e)
            {
                this.Visible = false;
                Form1 frm = new Form1();
                frm.Show();
            } 
        }Form1:
        private void button1_Click(object sender, EventArgs e)
            {
                Close();            FrmMain frm = FrmMain.CreateMainForm();           
                frm.Show(); 
            }不优雅,而且麻烦的做法
      

  3.   

    主窗体:
        public partial class FrmMain : Form
        {
            public FrmMain()
            {
                InitializeComponent();
                this.Text = this.Handle.ToString();
            }        private void ShowMainForm()
            {
                this.Visible = true;
            }        private void button1_Click(object sender, EventArgs e)
            {
                this.Visible = false;
                Form1 frm = new Form1();
                frm.OnShowMainForm += ShowMainForm;
                frm.Show();
            } 
        }Form1:
        public partial class Form1 : Form
        {
            public delegate void ShowMainFormHandler();
            public event ShowMainFormHandler OnShowMainForm;        public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                Close();            if (OnShowMainForm != null)
                {
                    OnShowMainForm();
                }
            }
        }越搞越麻烦的做法
      

  4.   

    主窗体:            Form2 f2 = new Form2();
                f2.Show();
                this.Hide();子窗体:            Form1 f1 = new Form1();
                f1.Show();
                this.Hide();记得在子窗体的FormClosing事件中同时关掉主窗体。不然子窗体关了,主窗体还隐藏着呢。
      

  5.   

    主窗体:
        public partial class FrmMain : Form
        {
            public FrmMain()
            {
                InitializeComponent();
                this.Text = this.Handle.ToString();
            }        private void button1_Click(object sender, EventArgs e)
            {
                this.Visible = false;
                Form1 frm = new Form1(this);
                frm.Show();
            } 
        }Form1:
        public partial class Form1 : Form
        {
            private FrmMain _FrmMain;
            public Form1(FrmMain frmMain)
            {
                InitializeComponent();            _FrmMain =frmMain;
            }        private void button1_Click(object sender, EventArgs e)
            {
                Close();            _FrmMain.Visible=true;
            }
        }继续写垃圾代码
      

  6.   

    主窗体:        private void button1_Click(object sender, EventArgs e)
            {
                Form2 f2 = new Form2();
                f2.parentForm = this;
                f2.Show();
                this.Hide();
            }子窗体:        public Form parentForm;        private void button1_Click(object sender, EventArgs e)
            {
                parentForm.Show();            this.Dispose();
            }        private void Form2_FormClosing(object sender, FormClosingEventArgs e)
            {
                parentForm.Dispose();
            }
      

  7.   


    我只说:
    1. 关掉主窗体,可能会关闭整个程序,除非再来一次:Application.Run(new FrmMain());
    2. 如果我的主窗体
    需要读取365个数据库
    3000个表
    1000000条记录
    你觉得每次关闭打开主窗体
    是否合理呢?
      

  8.   

    SocketUpEx写的够好了吧? 看不懂的话,楼主自己去学点基本的再来吧