在这个窗口form(n)打开 form(n+m) Form(n+m) form(n+m) = new Form(n+m)(); form(n) Hide();form(n+m) show();
打开新窗口就是重新新建这个窗口 多次打开同同一个窗口那不是多次打开了?关闭程序之后会有窗口没关闭,导致程序无法覆盖
如何解决呢

解决方案 »

  1.   

    你可以维护一个form列表,这样下次打开时,从里面查找,如果有,show出来就可以了,不要每次都new
      

  2.   

    http://msdn.microsoft.com/zh-cn/library/system.windows.forms.application.openforms.aspx
      

  3.   

    可以考虑MDI模式,加几行判断就可以阻止新建窗口
      

  4.   

     Application.Exit(); 这个可以关闭消息列队  但是如果我没有点窗口右上角的X关闭 只是用this.close(); 怎么触发
      

  5.   

    Application.Exit();可以关闭窗口 但是因为我显示一个窗口是关闭上个窗口 但不是关闭这个程序 Application.Exit();是把程序都关闭(因为关闭了主窗口)
      

  6.   

    事先声明,要代码不是好习惯,以后还是尽量根据大家的思路自己写比较好代码写的比较早了是vs2005的        #region " 单实例窗体 "
            static private Hashtable formMap = new Hashtable();        //'formClass 窗体类名字        //'keyPrefix 后缀,用于区别统一窗体,不同参数的情况,用后缀区分
            //'          当keyPrefix不为空时,窗体由调用者显示        public Form CreateSingletonForm(string formClass, string keyPrefix)
            {
                string formKey = formClass;
                string ffs = formKey; //窗体类的全名            try
                {
                    //Find it in formMap first
                    Form frm = null;
                    Object obj = null;                if (formMap.Contains(formKey))
                        frm = (Form)formMap[formKey];                //Then check if need create it
                    if (frm == null)
                    {
                        Assembly ta = Assembly.GetExecutingAssembly();
                        obj = ta.CreateInstance(ffs);
                        frm = (Form)obj;                    formMap[formKey] = frm;
                    }
                    else if (frm.IsDisposed)
                    {
                        System.Reflection.Assembly ta = System.Reflection.Assembly.GetExecutingAssembly();
                        obj = ta.CreateInstance(ffs);
                        frm = (Form)obj;                    formMap[formKey] = frm;
                    }
                    else if (frm.WindowState == FormWindowState.Minimized)
                    {
                        frm.WindowState = FormWindowState.Normal;
                    }                frm.MdiParent = this;
                    frm.BringToFront();
                    if (keyPrefix == null || keyPrefix.Length == 0)
                    {
                        frm.Show();
                    }                return frm;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("创建窗体失败:" + ex.Message);
                }
                return null;
            }