运行的时候先出来窗体一 然后在窗体一new了一个窗体2 然后我窗体1hide 窗体2show,当我按窗体2右上角的关闭按钮的时候 他不能关闭整个程序 在vs上要按 f6才能结束调试 我用了窗体2里面的 fromclosing 在里面写代码Application.Exit() 确实能达到我要的效果 想问下怎样可以直接关闭右上角的按键就可以关闭了?

解决方案 »

  1.   

    Application.Exit()是最简单直接有效的办法其他的办法也有很多,但是比这个麻烦多了,不知道你为什么不用Application.Exit()可以在窗体1里添加窗体2的close事件在事件里写关闭自己的代码也可以实现整个程序的退出
      

  2.   

    主窗体退出,程序才能退出。如果要在子窗体关闭时退出,最好的办法是写Application.Exit()。
      

  3.   


    既然都要关闭整个程序了,那为何不用Apllication.Exit()。
      

  4.   

    在form2的closing事件中写form1的close事件
      

  5.   

    设置一下 窗体的,Closing或Closed事件,使用Application.exit方法
      

  6.   

    那意思是 我每建立一个窗体就要加一下代码?
    private void frm_main_FormClosing(object sender, FormClosingEventArgs e)
            {
                Application.Exit();
            }
      

  7.   

    我的具体代码是这样写的 
    private void frm_main_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (MessageBox.Show("确定退出吗?", "安全提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                    Application.Exit();
                else e.Cancel =false ;
            }
    这样写我发现两个问题 第一 那个MessageBox会出现两次! 第二 我选择取消的时候他还是关闭了 不过关闭的是本窗体而不是整个程序 怎么可以关闭整个程序? 
      

  8.   

    1)else e.Cancel=false;//是完全没有作用的代码
    2)MessageBox出现两次,我猜是你hide的窗体的Closing事件中有同样的代码
      

  9.   

    对啊,
    看一下你的另一个窗体有没有和主窗体Closing事件中一样的代码,若有的话
    可以在关闭主窗体时,在主窗体Closing事件里取消那一个窗体的Closing事件的订阅
      

  10.   

     else e.Cancel =false  这个问题是我犯2了 出现两次的问题怎么解决?其他窗体没有这个代码 我问了下别人 他这样答的 会出现2次是因为你在调用Application.Exit()的时候,也会产生这个事件,此时它的CloseReason的值是CloseReason.ApplicationExitCall,使用CloseReason有几种,你可以去看一下
    那。。说白了。。怎样改才会只出现一次?
      

  11.   

    改成了这样成功了,可以结贴了。 我想问下大家一般多窗体的时候的代码是怎样的?新手,想得到一个好的模式做基础。
    我的是
    form1中
    {
      frm_main main = new frm_main();
                    main.Show();
                    this.Hide ();
    }
    然后每次的关闭都是用
     Application.Exit(); 
    这样有问题吗?一般的模式是怎样?
      

  12.   

    ··忘记把代码贴上去了   if (MessageBox.Show("确定退出吗?", "安全提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    this.Dispose();
                    Application.Exit();
                }
                else e.Cancel = true;
      

  13.   

    你可以做一个基类Form,里面加上这个事件,所有窗体都去继承它,这样就不用一个个窗体写这段代码了。这也是OOP通过继承让代码复用的一个典型例子。
      

  14.   

    意思是建立一个baseForm继承form 再基类加代码 然后以后我继承的窗体类继承baseForm 对吗?