长久以来,一直很好奇类似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; //不显示在系统任务栏 } }
/// <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; }
5、至此,所有的操作都完成了。