前几天写的winform程序,需要在程序运行时,切换或者重新设置托盘图标。
我用的是windows7下的256×256px的两个icon。想到如下方法:
1.直接访问图标资源
添加一个托盘图标,命名为notifyIcon,并为它的icon属性选择一个图标。
如图所示,向工程中添加两个icon资源,分别命名为:Connected和Disconnected。
在代码中引入资源文件的命名空间:
using System.Resources;
然后,就可以直接以访问icon资源的方式,重新设置托盘图标:
this.notifyIcon.Icon = Properties.Resources.Connected;
或者
this.notifyIcon.Icon = Properties.Resources.Disconnected;
2.使用ImageList存取Icon
ImageList控件可以存储的图片文件包括:bmp, gif, jpg, jpeg, png, ico。
添加一个ImageList控件,命名为imageList。
右键其属性,ColorDepth选择Depth32Bit,Images集合添加两个上述的icon文件。
然后,根据索引index,从imageList中取icon,设为托盘图标。
Image img = this.imageList.Images[1];//索引0指向第一个icon,1指向第2个icon
Bitmap b = new Bitmap(img);
Icon icon = Icon.FromHandle(b.GetHicon());
this.notifyIcon.Icon = icon;
两种方法对比
1.图标质量:由于我使用的是256×256的大图标,第一种方法直接访问资源,图标显示正常。第二种方法,要经过image-icon转化,显示图标时略有失真。(如有解决方法,不吝赐教)
2.效率:第二种方法应该效率更高,适合做托盘图标闪烁等效果。