菜鸟提问
比如说 Program.cs文件中含的是: Application.Run(new form1);
而在 form1 中有按钮可以打开 form2 但是并不能销毁掉from1
又如 form2 中有按钮可以打开 form3 但怎样能销毁掉form1 和form2 ???
  再就是 如果有很多 form 而各个窗体又都是不一样的,又该怎样来实现每次打开新的窗体,同时又能销毁掉旧的窗体?
希望代码尽量简单,而且注释尽量详细  谢谢了
    (搜索到的答案太让人寒心了...)

解决方案 »

  1.   

    form2 newfrm = new form2(); 
    newfrm.Show(); 第2个
    form3 newfrm = new form3(); 
    newfrm.Show(); 
    form1.Hide();
    form2.Hide();企业黄页:http://www.12580520.com or http://www.0663bx.com/yellow
      

  2.   

    以前在csdn上有一个很完整的答案,实在是没找到,楼主再找找,解决方法很好
      

  3.   


      newform.dispose(); //释放资源 
                newform =null; //类似于自杀
      

  4.   

    建立一个public静态类建立这个公共方法
             public static void FormShow(Form formInstance)
            {
                if (formInstance == null)
                {
                    return;
                }
                formInstance.Show();
                这里接其他的,如activatem,FormWindowState等.
            }
    .........................
    然后把启动窗体外的form2建立一个private static form2 formInstance的私有静态.
    以及每个窗体建立启动过程
            public static fmMotherSearch FormInstance
            {
                get
                {
                    if (formInstance == null || formInstance.IsDisposed)
                    {
                        formInstance = new form2();
                    }
                    return formInstance;
                }
            }
    其他form34567都一样.一般情况下把这些窗体的构造函数改为private统一启动方式.启动窗体的方式则为 : 公共类.FormShow(form2.FormInstance);这样每个窗体的实际类名是保存在自己窗体内的private的,所以除了主窗口外都可以随意关闭而不影响其他窗体.
    缺点是每个窗体只能启动一次
      

  5.   

    刚才有点错误,不小心把我的窗口名字带进去了,修改为如下
    建立一个public静态类 建立这个公共方法 
            public static void FormShow(Form formInstance) 
            { 
                if (formInstance == null) 
                { 
                    return; 
                } 
                formInstance.Show(); 
                这里接其他的,如activatem,FormWindowState等. 
            } 
    ......................... 
    然后把启动窗体之外的如form2建立一个private static form2 formInstance的私有静态. 
    以及每个窗体建立启动过程 
            public static form2 FormInstance 
            { 
                get 
                { 
                    if (formInstance == null || formInstance.IsDisposed) 
                    { 
                        formInstance = new form2(); 
                    } 
                    return formInstance; 
                } 
            } 
    其他form34567都一样.一般情况下把这些窗体的构造函数改为private统一启动方式. 启动窗体的方式则为 : 公共类.FormShow(form2.FormInstance); 这样每个窗体的实际类名是保存在自己窗体内的private的,所以除了主窗口外都可以随意关闭而不影响其他窗体. 
    缺点是每个窗体只能启动一次
      

  6.   

    1楼 你答案太牵强了吧
    2楼 谢谢你的支持 我都搜过了
    3楼 你没看清我的问题,主窗体并不能销毁掉
    4楼 大家一起学习就是哈
    5楼 你说的大家都学过
    6楼 谢谢帮忙顶哈
    7-9楼 嘿嘿 你的答案最靠谱了  不过我想要的是 from1 from2都是可以销毁的
                                   即每次创建新窗体时旧窗体同时销毁掉
      

  7.   

    Windows里面必须维护一个主线程不能结束,不然整个程序就结束运行了,所以你在form1里面显示form2然后又想把form1关掉是不可以的,结果会是整个程序都结束。至于更复杂的实现方式可以让启动窗体关闭,但那就复杂了.涉及线程调用托管.我只是大概听说过,并且很难做.比较变通的实现你的要求就是启动窗体为form0,form0启动的同时hide.然后启动form1.但是这样做的话,每个窗体的关闭方法需要加一个公共方法,就是检测如果程序内没有其他打开的窗体就关闭form0.否则线程就死在那里了.
      

  8.   

    谢谢13楼的,   我在网上有看到过通过改 Program.cs 来实现的,
    想想应该是能通过修改Application.Run()中的参数来实现的,只是自己没实现
    倒是觉得有点遗憾而已  不过你的方法以及很不错了