winfom的有关问题求各位大大们来看看

winfom的问题求各位大大们来看看
第一个问题....相同的窗体如何只能new一个....目前我用的是showdialog的方法....但是很不实用.


第二个问题....由于使用了showdialog的方法...所以每次打开子窗体候,主窗口都在后面,很难看...
本来想hide掉主窗体....但是hide后怎么显示呢?难道再new一个吗?????


------解决方案--------------------
不太明白,有关第二个问题:

        NotifyIcon 通知栏图标 = new NotifyIcon();
        void 通知栏图标_MouseClick(object sender, MouseEventArgs e)
        {
            this.ShowInTaskbar = true;
            this.Show();
            this.WindowState = FormWindowState.Normal;
            this.Activate();
        }
        private void 记事历_Deactivate(object sender, EventArgs e)
        { 通知栏气泡(); }
        private void 记事历_SizeChanged(object sender, EventArgs e)
        { 通知栏气泡(); }

        void 通知栏气泡()
        {
            if (this.WindowState == FormWindowState.Minimized)
            {
                this.ShowInTaskbar = false;
                通知栏图标.BalloonTipText = "最小化到托盘,重新打开请单击这里。";
                通知栏图标.BalloonTipTitle = this.Text;
                通知栏图标.ShowBalloonTip(1000);
            }
        }

------解决方案--------------------
这个意思是在任务栏里通过通知图标再显示主窗体,
其实你hide主窗体后,在关闭新窗体时,再显示主窗体
------解决方案--------------------
第一个问题:可以考虑用单例,自行百度

第二个问题:
            
//父窗体
            SonForm form = new SonForm(this);
            form.ShowDialog();
            //子窗体
           private Form form;
           public SonForm(Form form)
           {
               InitializeComponent();
               this.form = form;
               form.Hide();
           }
           private void SonForm_FormClosed(object sender, FormClosedEventArgs e)
           {
               form.Show();
           }


------解决方案--------------------
  private void ShowFormInRightPanel(Form form)
        {
            form.TopLevel = false;
            this.panel2.Controls.Clear();
            this.panel2 .Controls.Add(form);
            form.Dock = DockStyle.Fill;
            form.Show();
        }
在panel中显示