运行开始有一个登陆窗口,登陆后出现另外一个窗口!!
这时退出程序分两种情况:
1.点窗口的关闭按钮。
2.点菜单的“退出”这两个分别对应着FormClosed和tsmiExit_Click(退出的单机事件)但事件代码都是一样的如下:DialogResult result = MessageBox.Show("确定要退出吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
  Application.Exit();
}但实际运行时却有不尽人意的地方:
1.点窗口的关闭后,应用程序不能真正的退出,还有点一些调试环境中的停止按钮才能退出。
2.点菜单的“退出”,是能完全退出,但却会弹出两次对话框(代码中只有一次,我也只要它弹出一次)。请问怎么解决呢!!

解决方案 »

  1.   

    通过tsmiExit点击退出,最好还是要调用FormClose,所有会有两次询问;
    两种方案:
    第一种是加一个标志量,如果点了tsmiExit,标志量置位,然后在formclose里判断,已经由tsmiExit请求退出了,那么就不需要执行相应代码了
    第二种是在点击tsmiExit之后注销FormClosed事件即可.
      

  2.   

     private void OnClosing(object sender, FormClosingEventArgs e)
            {
                if (MessageBox.Show("确实要退出吗", "hello", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                    e.Cancel = true;
            }
      

  3.   


    // 改成这样
    void tsmiExit_Click(object sender, EventArgs e)
    {
       this.Close();
    }
    void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        Application.Exit();
    }// 如果要问是否确定退出,在Form1_FormClosing中做,见5楼(人生如梦)的回帖。
      

  4.   

    bt_clicked()//事件
    {
       fommain.Close();//这就行了,}forMain.FomClosing()//事件
    {
        MessageBox != Yes
        {
           e.Cancel = true;
        }
    }
    //接分咯.
      

  5.   

    补充一下tsmiExit_Click事件里直接调用:Close();
    然后在FormClosing事件里做处理   protected override void OnFormClosing(FormClosingEventArgs e)
            {
                DialogResult result = MessageBox.Show("确定要退出吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (result == DialogResult.Yes)
                {
                    Application.Exit();
                }
                else 
                {
                    e.Cancel = true;
                }
            }
      

  6.   

    调用两次的原因是:Application.Exit();的过程要调用form_closed,所以你在tsmiExit_Click 中加一句 this.FormClosed -= new FormClosedEventHandler(Form1_FormClosed);然后再Application.Exit();就不会调用两次了
      

  7.   

    加个标志就好了,如果点了tsmiExit_Click 就不走form_closed
    意思是两个事件中你就走一个就好了