C#实现闪动托盘图标效果的方法
程序员文章站
2023-11-22 08:23:28
本文实例讲述了c#实现闪动托盘图标效果的方法。分享给大家供大家参考,具体如下:
在用户正在登录qq或者使用firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用...
本文实例讲述了c#实现闪动托盘图标效果的方法。分享给大家供大家参考,具体如下:
在用户正在登录qq或者使用firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用户正在运行的任务。
闪动图标可以使用定时切换托盘图标的方式实现,托盘图标可以从imagelist控件中获取。在imagelist控件里面添加三个icon,第一个icon表示窗体启动以后的托盘图标。第二个和第三个图标分别表示当特定的任务发生的时候,定时切换的图标。
(1)设置托盘的图标可以从imagelist控件中的image对象转换为icon对象
/// <summary> /// 设置托盘显示的图标 /// </summary> /// <param name="index">图像列表中图片的索引</param> private void seticonimg(int index) { image img = this.imgicon.images[index]; bitmap b = new bitmap(img); icon icon = icon.fromhandle(b.gethicon()); this.nimain.icon = icon; }
(2)定时器事件实现图标的切换
/// <summary> /// 定时器切换图标显示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tmricon_tick(object sender, eventargs e) { if (iconflag) { this.seticonimg(1); iconflag = !iconflag; } else { this.seticonimg(2); iconflag = !iconflag; } }
(3)窗体的最小化按钮和关闭按钮实现隐藏窗体的功能,窗体关闭时,会执行formclosing 事件,释放与此窗体关联的所有资源。因此需要取消关闭事件,实现窗体的隐藏和托盘的显示功能。
/// <summary> /// 关闭窗体时隐藏窗体显示托盘图标 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void frmmain_formclosing(object sender, formclosingeventargs e) { e.cancel = true; this.hide(); this.nimain.visible = true; }
(4)托盘关联菜单有四个功能:
① “显示” :显示主窗体、隐藏托盘图标。
② “运行”:图标闪动效果,模拟任务正在运行。
③ “停止”:恢复初始化的图标,模拟任务停止。
④ “退出”:提示用户并退出应用系统。
完整的代码如下:
namespace notifyicondemo { public partial class frmmain : form { //切换图片的标识 private bool iconflag = false; //系统是否运行 private bool isrun = false; /// <summary> /// /// </summary> public frmmain() { initializecomponent(); //设置icon显示的图片 this.seticonimg(0); } /// <summary> /// 设置托盘显示的图标 /// </summary> /// <param name="index">图像列表中图片的索引</param> private void seticonimg(int index) { image img = this.imgicon.images[index]; bitmap b = new bitmap(img); icon icon = icon.fromhandle(b.gethicon()); this.nimain.icon = icon; } /// <summary> /// 显示主窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmimain_click(object sender, eventargs e) { //显示主窗体 this.visible = true; this.windowstate = system.windows.forms.formwindowstate.normal; //隐藏托盘图标 this.nimain.visible = false; this.show(); } /// <summary> /// 退出 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmiexit_click(object sender, eventargs e) { //设置托盘的提示信息 this.nimain.balloontiptext = "成功退出demo!"; this.nimain.balloontiptitle = "退出"; this.nimain.showballoontip(1000*3); //延迟退出 thread.sleep(1000 * 2); //释放托盘图标资源 this.nimain.dispose(); //终止线程 application.exitthread(); } /// <summary> /// 最小化时隐藏窗体,显示托盘图标 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void frmmain_sizechanged(object sender, eventargs e) { if (this.windowstate == formwindowstate.minimized) { this.hide(); this.nimain.visible = true; } } /// <summary> /// 关闭窗体时隐藏窗体显示托盘图标 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void frmmain_formclosing(object sender, formclosingeventargs e) { e.cancel = true; this.hide(); //this.showintaskbar = false;//取消窗体在任务栏的显示 this.nimain.visible = true; } /// <summary> /// 加载窗体时隐藏窗体 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void frmmain_load(object sender, eventargs e) { this.hide(); } /// <summary> /// 定时器切换图标显示 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tmricon_tick(object sender, eventargs e) { if (!this.isrun) { return; } if (iconflag) { this.seticonimg(1); iconflag = !iconflag; } else { this.seticonimg(2); iconflag = !iconflag; } } /// <summary> /// 点击运行菜单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmirun_click(object sender, eventargs e) { this.tsmirun.enabled = false; this.tsmistop.enabled = true; //设置运行状态 this.isrun = true; } /// <summary> /// 点击停止菜单 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void tsmistop_click(object sender, eventargs e) { this.tsmirun.enabled = true; this.tsmistop.enabled = false; //设置为停止状态 this.isrun = false; //恢复图标显示 this.seticonimg(0); } } }
更多关于c#相关内容感兴趣的读者可查看本站专题:《c#常见控件用法教程》、《c#数据结构与算法教程》、《c#面向对象程序设计入门教程》及《c#程序设计之线程使用技巧总结》
希望本文所述对大家c#程序设计有所帮助。