C#实现闪动托盘图标效果的方法
本文实例讲述了C#实现闪动托盘图标效果的方法。分享给大家供大家参考,具体如下:
在用户正在登录QQ或者使用Firemail邮件系统自动收取邮件的时候,托盘图标会闪动提示用户正在运行的任务。
闪动图标可以使用定时切换托盘图标的方式实现,托盘图标可以从ImageList控件中获取。在ImageList控件里面添加三个icon,第一个icon表示窗体启动以后的托盘图标。第二个和第三个图标分别表示当特定的任务发生的时候,定时切换的图标。
(1)设置托盘的图标可以从ImageList控件中的Image对象转换为Icon对象
///<summary>
///设置托盘显示的图标
///</summary>
///<paramname="index">图像列表中图片的索引</param>
privatevoidsetIconImg(intindex)
{
Imageimg=this.imgIcon.Images[index];
Bitmapb=newBitmap(img);
Iconicon=Icon.FromHandle(b.GetHicon());
this.niMain.Icon=icon;
}
(2)定时器事件实现图标的切换
///<summary>
///定时器切换图标显示
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidtmrIcon_Tick(objectsender,EventArgse)
{
if(iconFlag)
{
this.setIconImg(1);
iconFlag=!iconFlag;
}
else
{
this.setIconImg(2);
iconFlag=!iconFlag;
}
}
(3)窗体的最小化按钮和关闭按钮实现隐藏窗体的功能,窗体关闭时,会执行FormClosing事件,释放与此窗体关联的所有资源。因此需要取消关闭事件,实现窗体的隐藏和托盘的显示功能。
///<summary>
///关闭窗体时隐藏窗体显示托盘图标
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidFrmMain_FormClosing(objectsender,FormClosingEventArgse)
{
e.Cancel=true;
this.Hide();
this.niMain.Visible=true;
}
(4)托盘关联菜单有四个功能:
①“显示”:显示主窗体、隐藏托盘图标。
②“运行”:图标闪动效果,模拟任务正在运行。
③“停止”:恢复初始化的图标,模拟任务停止。
④“退出”:提示用户并退出应用系统。
完整的代码如下:
namespaceNotifyIconDemo
{
publicpartialclassFrmMain:Form
{
//切换图片的标识
privatebooliconFlag=false;
//系统是否运行
privateboolisRun=false;
///<summary>
///
///</summary>
publicFrmMain()
{
InitializeComponent();
//设置icon显示的图片
this.setIconImg(0);
}
///<summary>
///设置托盘显示的图标
///</summary>
///<paramname="index">图像列表中图片的索引</param>
privatevoidsetIconImg(intindex)
{
Imageimg=this.imgIcon.Images[index];
Bitmapb=newBitmap(img);
Iconicon=Icon.FromHandle(b.GetHicon());
this.niMain.Icon=icon;
}
///<summary>
///显示主窗体
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidtsmiMain_Click(objectsender,EventArgse)
{
//显示主窗体
this.Visible=true;
this.WindowState=System.Windows.Forms.FormWindowState.Normal;
//隐藏托盘图标
this.niMain.Visible=false;
this.Show();
}
///<summary>
///退出
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidtsmiExit_Click(objectsender,EventArgse)
{
//设置托盘的提示信息
this.niMain.BalloonTipText="成功退出Demo!";
this.niMain.BalloonTipTitle="退出";
this.niMain.ShowBalloonTip(1000*3);
//延迟退出
Thread.Sleep(1000*2);
//释放托盘图标资源
this.niMain.Dispose();
//终止线程
Application.ExitThread();
}
///<summary>
///最小化时隐藏窗体,显示托盘图标
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidFrmMain_SizeChanged(objectsender,EventArgse)
{
if(this.WindowState==FormWindowState.Minimized)
{
this.Hide();
this.niMain.Visible=true;
}
}
///<summary>
///关闭窗体时隐藏窗体显示托盘图标
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidFrmMain_FormClosing(objectsender,FormClosingEventArgse)
{
e.Cancel=true;
this.Hide();
//this.ShowInTaskbar=false;//取消窗体在任务栏的显示
this.niMain.Visible=true;
}
///<summary>
///加载窗体时隐藏窗体
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidFrmMain_Load(objectsender,EventArgse)
{
this.Hide();
}
///<summary>
///定时器切换图标显示
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidtmrIcon_Tick(objectsender,EventArgse)
{
if(!this.isRun)
{
return;
}
if(iconFlag)
{
this.setIconImg(1);
iconFlag=!iconFlag;
}
else
{
this.setIconImg(2);
iconFlag=!iconFlag;
}
}
///<summary>
///点击运行菜单
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidtsmiRun_Click(objectsender,EventArgse)
{
this.tsmiRun.Enabled=false;
this.tsmiStop.Enabled=true;
//设置运行状态
this.isRun=true;
}
///<summary>
///点击停止菜单
///</summary>
///<paramname="sender"></param>
///<paramname="e"></param>
privatevoidtsmiStop_Click(objectsender,EventArgse)
{
this.tsmiRun.Enabled=true;
this.tsmiStop.Enabled=false;
//设置为停止状态
this.isRun=false;
//恢复图标显示
this.setIconImg(0);
}
}
}
更多关于C#相关内容感兴趣的读者可查看本站专题:《C#常见控件用法教程》、《C#数据结构与算法教程》、《C#面向对象程序设计入门教程》及《C#程序设计之线程使用技巧总结》
希望本文所述对大家C#程序设计有所帮助。