C# 退出对话框 DialogResult 用法 可防止弹出二次的尴尬

来源:互联网 发布:python科学计算下载 编辑:程序博客网 时间:2024/05/16 04:33

            昨天晚上在做项目的时候,遇到了点击程序的 退出 菜单时,会弹出二次确认是否退出程序的对话框,后来分析了一下,是因为我在 Closeed 中的代码里也有一段弹出对话框询问是否退出程序的代码,后来经在网上查询,并改善,得来以下代码,可有效防止弹出二次对话框的尴尬!


           我在写 Closing的退出事件中原本是这样写的,如下代码:

view plainprint?
  1. /// <summary>    
  2. /// 点击关闭时询问    
  3. /// </summary>    
  4. /// <param name="sender"></param>    
  5. /// <param name="e"></param>    
  6. private void indexForm_FormClosing(object sender, FormClosingEventArgs e)    
  7. {    
  8.     DialogResult dr = MessageBox.Show("是否要退出?""关闭提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);  
  9.     if (dr == DialogResult.OK)  
  10.     {  
  11.         Application.Exit();  
  12.     }  
  13.     else if(dr==DialogResult.Cancel)  
  14.     {  
  15.         e.Cancel = true;  
  16.     }  
  17.   
  18. }  

           上面的代码表面看上去没错,流程是正确的。但是经百度后,才明白。Application.Exit()是多余的,在程序执行到 FormClosing这个事件时自动会Exit也就是退出程序的,上面的代码会在第一次Close时调用Show,然后在Exit时又会Show一次,这样就出现了一开始说的情况,当点关闭时弹出二次询问的对话框,所以把 Application.Exit()去掉就可以了。


           以下代码可有效的避免二次询问的现象。

 

view plainprint?
  1. /// <summary>    
  2. /// 点击关闭后,停止程序    
  3. /// </summary>    
  4. /// <param name="sender"></param>    
  5. /// <param name="e"></param>    
  6. private void indexForm_FormClosed(object sender, FormClosedEventArgs e)    
  7. {    
  8.     Application.Exit();    
  9. }    
  10. /// <summary>    
  11. /// 点击关闭时询问    
  12. /// </summary>    
  13. /// <param name="sender"></param>    
  14. /// <param name="e"></param>    
  15. private void indexForm_FormClosing(object sender, FormClosingEventArgs e)    
  16. {    
  17.     if (MessageBox.Show("是否退出系统""提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)    
  18.     {    
  19.         e.Cancel = true;    
  20.     }    
  21. }    
  22. /// <summary>    
  23. /// 退出系统    
  24. /// </summary>    
  25. /// <param name="sender"></param>    
  26. /// <param name="e"></param>    
  27. private void 退出系统ToolStripMenuItem_Click(object sender, EventArgs e)    
  28. {    
  29.     if (MessageBox.Show("是否退出系统""提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)    
  30.     {    
  31.        Application.ExitThread();    
  32.     }    
  33.     else    
  34.     {    
  35.         return;    
  36.     }    
  37. }   
原创粉丝点击