我在主窗体的 formclosing事件中询问用户是否退出,为什么这个询问会出现两次呢?
就是下面的代码,这个提示框会出现两次,这不是我想要用效果,我想只询问一次就行了,为什么是两次呢?
哪行代码影响的呢?好象就该是 application.exit()这一句吧。可是这一句不能省呀,如果省了这一句,好象不能真正退出呀。(因为如果不加这一句,则退出程序后,菜单中的调试按钮还是虚的,说明程序没有真正的退出运行状态)        private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (DialogResult.Yes == MessageBox.Show("您确实要关闭主程序吗?", "询问", MessageBoxButtons.YesNo,MessageBoxIcon.Question))
            {
                Application.Exit();
            }
            else
            {
                e.Cancel = true;
            }
        }

解决方案 »

  1.   

    你用Application.Exit()可能会再次调用FormClosing
      

  2.   

    e.Cancel = false; //强制关闭所有窗口 
    替换Application.Exit();
    试试
      

  3.   

    直接用e.Cancel = false;就可以了,因为这个事件就是在关闭窗口
      

  4.   

    private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (e.CloseReason == CloseReason.ApplicationExitCall)
                    return;
                if (DialogResult.Yes == MessageBox.Show("您确实要关闭主程序吗?", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question))
                {
                    Application.Exit();
                }
                else
                {
                    e.Cancel = true;
                }
            }
      

  5.   

    可以但实质还是进来了,只不过在前面给return
      

  6.   

    或者让你的X失效或没有,加一个退出按钮。再或多加一个判断 private void FrmMain_FormClosing(object sender, FormClosingEventArgs e)
            {if(!bClosing)
    {
                if (DialogResult.Yes == MessageBox.Show("您确实要关闭主程序吗?", "询问", MessageBoxButtons.YesNo,MessageBoxIcon.Question))
                {
                    bClosing = true
                    Application.Exit();
                }
                else
                {
                    e.Cancel = true;
                }
    }
            }
      

  7.   

    System.Environment.Exit(0);完爆一切