我的主窗体的FormClosing事件里 打开一个新窗体 新窗体判断是否关闭(用的不是showmessage.box)新窗体是radiobutton 来选择 
通过单步执行 看 代码 
当选择了退出程序 子窗体隐藏 后面因为没有代码了 就回到 FormClosing 的 application.exit 方法 
问题来了 
当执行了 application.exit以后 代码又跳到了 FormClosing 里的第一行 
是什么原因???? 死循环啦

解决方案 »

  1.   

    选择窗体:
    private void button1_Click(object sender, EventArgs e)
            {
                if (m.Checked)//选择最小化
                {
                    this.Dispose();//选择窗体关闭
                    Form1.i.Visible = false;//主窗体隐藏            }
                else//选择退出
                {
                    this.Dispose();//选择窗体关闭
                    Form1.ex = "1";
                }
            }
    主窗体的:
            public void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
               
                quit q = new quit();
                q.ShowDialog();
               if (ex == "1")
               {
                   notifyIcon1.Visible = false;
                   Application.Exit();
                  // MessageBox.Show("程序关闭");
               }
      

  2.   

    楼主以上代码会造成死循环,Application.Exit()会通知有窗体关闭,并会引发各窗体的FormClosing事件及FormClosed事件。public void Form1_FormClosing(object sender, FormClosingEventArgs e)
            {
             
                quit q = new quit();
                q.ShowDialog();
              if (ex == "1")
              {
                  notifyIcon1.Visible = false;
                  Application.Exit();              //此代码会产生死循环,引发各窗体的FormClosing事件及FormClosed事件,包括Form1
                  // MessageBox.Show("程序关闭");
              }
      

  3.   

    楼主的写法中包含两个问题:
    1.主窗体Form1与调用的窗体中变量相互引用,容易引起混乱,应考虑使用Tag属性或其它方法储存用户的选择信息,并在Form1中读取该返回值。
    2.不应在FormClosing事件中调用Application.Exit()方法,考虑枚举所有打开的窗口,并调用Close()方法关闭。
      

  4.   

    没大看明白你想要做什么。如果是适核实关闭活动的话一下代码可以。
    protected override void OnClosing(CancelEventArgs e)
    {
    DialogResult rt =
    MessageBox.Show("Are you sure your are going to close the application?",
    "Confirm",
    MessageBoxButtons.YesNo);
    if (rt == DialogResult.Yes) {
    e.Cancel = false;
    }
    else {
    e.Cancel = true;
    }
    base.OnClosing(e);
    }其他情况可以照葫芦画瓢。
      

  5.   


    在一个窗体的FormClosing事件中调用Application.Exit()是极度不科学的打法,应该重新整理思路,使用其它办法。
    一个标准的WinForm程序从开始到结束,应该是在Program.cs中控制,而不是在个别窗体中控制。楼主非要在FormClosing事件中结束应用程序的话,以下是变通的方法:
    notifyIcon1.Visible = false;
    //将Application.Exit使用其它方法替代
    //Application.Exit();  
    foreach(Form frm in Application.OpenForms)
    {
        if (frm!=this)
            frm.Close();
    }
      

  6.   


            // 选择窗体: 
             private void button1_Click(object sender, EventArgs e) 
            { 
               if (m.Checked)// 选择最小化 
                 this.DialogResult = DialogResult.Cancel;
               else // 选择退出 
                   this.DialogResult = DialogResult.OK;
              Close(); 
            } 
           
           // 主窗体的: 
            public void Form1_FormClosing(object sender, FormClosingEventArgs e) 
           { 
              
                quit q = new quit(); 
                e.Cancel=q.ShowDialog!=DialogResult.OK; // q.ShowDialog()结果不等于DialogResult.OK就e.Cancel=true中止关闭主窗口 
           }