实现将程序图标显示在系统托盘

来源:互联网 发布:淘宝优站特价专场 编辑:程序博客网 时间:2024/05/02 01:06

长久以来,一直很好奇类似QQ等软件的图标是如何显示在系统托盘的,这次有个项目正好用到,所以就研究了一下。

具体方法如下:

1、首先我们需要在工具栏找到NotifyIcon这个控件,找到后将其拖到Form中。

然后,我们需要设置其Icon属性、Text属性和Visible属性。

其中:

          Icon属性是设置显示在右下角系统托盘的图标。

          Text属性是设置当鼠标移动到系统托盘图标时显示的文字,一般设置为软件的名称。

          Visible属性是设置小图标是否显示在系统托盘。注意:如果程序退出前没有将其设置为false,那么小图标将一直停留在系统栏,直到鼠标从上面经过时才会消失。

2、基本属性设置完之后,我们要将程序主窗体的ShowInTaskBar设置为True。这样小图标才可以显示在系统托盘中,一般,这个属性默认就是True。

3、设置完属性,我们就需要对NotifyIcon方法进行实现。

      我要做的实现是当点击最小化时,让程序的图标出现在“系统托盘”的位置上,而不显示在“任务栏”中。当双击系统托盘上的图标时,还原程序窗体,再次双击时最小化到系统托盘。点击程序的关闭按钮,正常退出程序。

      要实现上面的功能我们需要实现两个方法:

    一个方法是主窗体的SizeChanged事件。

        /// <summary>        /// 最小化时到系统托盘        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void MainForm_SizeChanged(object sender, EventArgs e)        {            if (this.WindowState == FormWindowState.Minimized)  //判断是否最小化            {                this.ShowInTaskbar = false;  //不显示在系统任务栏            }        }

     一个是NotifyIcon的双击事件。
        /// <summary>        /// 双击系统托盘,界面还原,再次双击,界面最小化到系统托盘        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)        {            if (this.WindowState == FormWindowState.Minimized)            {                                this.WindowState = FormWindowState.Maximized;  //还原窗体                this.ShowInTaskbar = true;  //显示在系统任务栏            }            else            {                this.WindowState = FormWindowState.Minimized;            }        }
     

4、这样,基本的功能就实现了,但是有时候我们还想要在系统托盘上右键关闭软件,那么就需要为系统托盘上的图标添加一个右键菜单。

      首先,我们需要在主窗体中拖入一个ContextMenuStrip控件,起名为ContextMenuStrip1,然后点击控件,打开其Items属性,然后添加一个MenuItem,起名为tsmiClose,并将其Text属性设置为“退出”。

     然后,我们再次选中ContextMenuStrip1,在窗体上会看到这个控件,然后在我们命名的“退出”菜单上双击,编辑退出的方法。

        /// <summary>        /// 退出        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void tsmiClose_Click(object sender, EventArgs e)        {            this.Close();            notifyIcon1.Visible = false;        }

      最后,我们需要将退出菜单关联到notifyIcon1的控件上,我们需要将notifyIcon1的ContextMenu属性,设置为contextMenuStrip1。

5、至此,所有的操作都完成了。


原创粉丝点击