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

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


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

  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()去掉就可以了。


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

 

  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. }   
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
新浪阅读器总结 一:综述 在新浪阅读器中,我首次学到了RSS(Rich Site Summary)或(Really Simple Syndication)中文名称:建议信息聚合。RSS是一种基于XML标准,在互联网上被广泛采用的内容包装和投递协议。 二:项目实现的成果和代码。 再这里面,我首先对xml文件中的内容进行总结: 1:如何加载xml文件(两种方法) A:通过打开文件对话框来打开(openfiledialog) if (openFileDialog1 .ShowDialog()==DialogResult .OK ) { String strFileName = openFileDialog1.FileName; //加载xml文件 XmlDocument doc = new XmlDocument(); doc.Load(strFileName ); } B:文件的路径是web地址 //加载xml文件 XmlDocument doc = new XmlDocument(); //文件路径可以是web地址............ doc.Load("http://rss.sina.com.cn/news/marquee/ddt.xml"); 2:如何获取xml的内容 获取单一节点的内容(SelectSingleNode) XmlNode node = doc.SelectSingleNode("rss/channel/title"); 获取多个节点的内容(SelectNodes) XmlNodeList list = doc.SelectNodes("rss/channel/item"); 3:获取属性值(Attributes ["version"].Value) //获取属性(根节点) XmlNode root = doc.SelectSingleNode("rss"); MessageBox.Show(root .Attributes ["version"].Value ); 4:获取text的内容 String title = itemlist[i].SelectSingleNode("title").InnerText; 下面对界面中学到的内容做个总结: 1:Treeview的afterselect事件 当点击treeview里面的频道信息时,加载右面的listview里面内容 如何往listview里面添加列(("日期", 100)日期表示列名,100表示列所占的长度): lv.Columns.Add("日期", 100); lv.Columns.Add("标题", 400); lv.Columns.Add("作者", 100); 将更新时间进行格式化; pubdate = Convert.ToDateTime(pubdate).ToString("yyy-mm-dd HH:mm:ss"); 向listview添加行内容的时候要注意第一个用lvi.text后面都用lvi.subitems.add 如下; lvi.Text = pubdate; lvi.SubItems.Add(title); lvi.SubItems.Add(author); lvi.Tag = link;//存储超链接 2:在treeview加载频道的信息(基本的格式) 首先获取频道的分类: XmlNodeList channelclasslist = doc.SelectNodes("opml/body/outline"); 得到频道数; ChannelClassCount = channelclasslist.Count; 通过循环来添加treeview的节点(下面的是一级节点) for (int i = 0; i < channelclasslist.Count;i++ ) { //增加treeview的一级节点 TreeNode tnchannelclass = new TreeNode(); tnchannelclass .Text =channelclasslist [i ].Attributes ["text"].Value.Replace ("-新浪RSS","") ; tnchannelclass.Tag ="0"; tvlist.Nodes.Add(tnchannelclass ); 3:如何将全屏显示(两种方法): A:使用全局变量(省略一部分代码) private bool isfullscreen = false; private void toolStripButton15_Click(object sender, EventArgs e) { if (isfullscreen ==false ) { isfullscreen = true; panel1.Visible = false; } else //与上面情况相反 { isfullscreen = false ; panel1.Visible = true ; } B:当前界面的显示情况与当前完全相反 是在全屏按钮事件下: panel1.Visible = !panel1.Visible; 4:listview下面的内容: A:属性:Mulit select(允许选择多项) FullRowSelect(选中整行) 该listview没有默认的图片,在imagelist里面可以选择图片 B:事件(lv_SelectedIndexChanged)选择之后改变的事件 这里面当选中listview中的内容,在下面的web中加载信息 5:缓存 在新浪阅读其中还加了一个缓存: 缓存就是当选中treeview节点时,访问缓存(url)判断是否有xml数据,这面分两种情况,当无缓存时,我们在这面要第一次读取,读取完将xml数据写入缓存并记录当前的读取时间,显示xml数据。当有缓存时,判断时间是否超时,如果已经超时,从网络中重新读取,读取完将xml数据写入缓存并记录当前的读取时间,显示xml数据。未超时的话,获取缓存中的数据显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值