Login                                            
    $show_login$

       Calender

       Blog Statistics
           
    • 加为好友
    • 打个招呼
    • 人气:0点
    • 魅力指数:点
    • 人气指数:21272点
    • 日志数:36篇
    • 日志评论-392条
    • 主页留言:1条

       Guestbook
          

       Latest Topics
    winform点击关闭,系统最小化到托盘的问题

    毕业设计,写一个Winform+Windows Service的程序。Winform用来配置参数,Windows Service用来执行具体任务,主要用来做局域网内的文件自动迁移。
           考虑到程序的特殊性和用户的习惯,在窗体中点击关闭时,程序应该最小化到托盘,而右击托盘上的程序ICON,单击“退出系统”时,才关闭应用程序。
            但窗体上的关闭,是封装好了的。除非将其屏蔽后,自己重写关闭事件。这样,太麻烦了,有没简单一点的实现方法呢?在窗体的Closing事件中,我试着添加如下代码:
           private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                    e.Cancel = true;
                    this.Visible = false;
            }
            单击关闭时,程序确实不会退出,而保留在系统托盘上。但问题又来了,选择托盘上的“退出系统”也无法关闭程序。看来Application.Exit()方法,实际上也调用了frmMain.Close()方法,从而在窗体关闭前被中止了。
             继续百度,google……
             无语,竟没找到一种很好的解决办法!
             仔细分析一下,窗体上的关闭和托盘上的关闭,其实是两个不同的事件。为了达到目的,必须点击窗体上的关闭时,执行closing事件,而点托盘上的“退出系统”时不执行此事件。设个标志变量试试,在窗体里,加一 private bool allowExit = false;执行Application.Exit()前,把allowExit=true;最后在closing事件中判断allowExit,代码如下:
            private void cmsNotify_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
            {
                if (e.ClickedItem.Name == "smItemOpen")
                {
                    this.Visible = true;
                }
                else if (e.ClickedItem.Name == "smItemExit")
                {
                    DialogResult dr = MessageBox.Show("确认退出本系统?","退出询问",MessageBoxButtons.YesNo,MessageBoxIcon.Question);
                    if (dr == DialogResult.Yes)
                    {
                        allowExit = true;
                        Application.Exit();
                    }
                }
            }
            private void frmMain_FormClosing(object sender, FormClosingEventArgs e)
            {
                if (!allowExit)
                {
                    e.Cancel = true;
                    this.Visible=false;
                }
            }
            到此,问题得到解决。虽然麻烦了点,但比起屏蔽掉关闭,然后自己添加关闭按钮,再写最小化事件好些吧,^O^

     阅读全文(234) | 回复

    最新评论
    发表评论
    昵称:
    密码:
    标题:

     请将您看到图片上的字符输入左边表单中