C#實現(xiàn)閃動托盤圖標(biāo)效果的方法
本文實例講述了C#實現(xiàn)閃動托盤圖標(biāo)效果的方法。分享給大家供大家參考,具體如下:
在用戶正在登錄QQ或者使用Firemail郵件系統(tǒng)自動收取郵件的時候,托盤圖標(biāo)會閃動提示用戶正在運行的任務(wù)。
閃動圖標(biāo)可以使用定時切換托盤圖標(biāo)的方式實現(xiàn),托盤圖標(biāo)可以從ImageList控件中獲取。在ImageList控件里面添加三個icon,第一個icon表示窗體啟動以后的托盤圖標(biāo)。第二個和第三個圖標(biāo)分別表示當(dāng)特定的任務(wù)發(fā)生的時候,定時切換的圖標(biāo)。
(1)設(shè)置托盤的圖標(biāo)可以從ImageList控件中的Image對象轉(zhuǎn)換為Icon對象
/// <summary>
/// 設(shè)置托盤顯示的圖標(biāo)
/// </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)定時器事件實現(xiàn)圖標(biāo)的切換
/// <summary>
/// 定時器切換圖標(biāo)顯示
/// </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)窗體的最小化按鈕和關(guān)閉按鈕實現(xiàn)隱藏窗體的功能,窗體關(guān)閉時,會執(zhí)行FormClosing 事件,釋放與此窗體關(guān)聯(lián)的所有資源。因此需要取消關(guān)閉事件,實現(xiàn)窗體的隱藏和托盤的顯示功能。
/// <summary>
/// 關(guān)閉窗體時隱藏窗體顯示托盤圖標(biāo)
/// </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)托盤關(guān)聯(lián)菜單有四個功能:
① “顯示” :顯示主窗體、隱藏托盤圖標(biāo)。
② “運行”:圖標(biāo)閃動效果,模擬任務(wù)正在運行。
③ “停止”:恢復(fù)初始化的圖標(biāo),模擬任務(wù)停止。
④ “退出”:提示用戶并退出應(yīng)用系統(tǒng)。
完整的代碼如下:
namespace NotifyIconDemo
{
public partial class FrmMain : Form
{
//切換圖片的標(biāo)識
private bool iconFlag = false;
//系統(tǒng)是否運行
private bool isRun = false;
/// <summary>
///
/// </summary>
public FrmMain()
{
InitializeComponent();
//設(shè)置icon顯示的圖片
this.setIconImg(0);
}
/// <summary>
/// 設(shè)置托盤顯示的圖標(biāo)
/// </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;
//隱藏托盤圖標(biāo)
this.niMain.Visible = false;
this.Show();
}
/// <summary>
/// 退出
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void tsmiExit_Click(object sender, EventArgs e)
{
//設(shè)置托盤的提示信息
this.niMain.BalloonTipText = "成功退出Demo!";
this.niMain.BalloonTipTitle = "退出";
this.niMain.ShowBalloonTip(1000*3);
//延遲退出
Thread.Sleep(1000 * 2);
//釋放托盤圖標(biāo)資源
this.niMain.Dispose();
//終止線程
Application.ExitThread();
}
/// <summary>
/// 最小化時隱藏窗體,顯示托盤圖標(biāo)
/// </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>
/// 關(guān)閉窗體時隱藏窗體顯示托盤圖標(biāo)
/// </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;//取消窗體在任務(wù)欄的顯示
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>
/// 定時器切換圖標(biāo)顯示
/// </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;
//設(shè)置運行狀態(tài)
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;
//設(shè)置為停止?fàn)顟B(tài)
this.isRun = false;
//恢復(fù)圖標(biāo)顯示
this.setIconImg(0);
}
}
}
更多關(guān)于C#相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《C#常見控件用法教程》、《C#數(shù)據(jù)結(jié)構(gòu)與算法教程》、《C#面向?qū)ο蟪绦蛟O(shè)計入門教程》及《C#程序設(shè)計之線程使用技巧總結(jié)》
希望本文所述對大家C#程序設(shè)計有所幫助。
相關(guān)文章
c# winform取消右上角關(guān)閉按鈕的實現(xiàn)方法
本文是對c#中winform取消右上角關(guān)閉按鈕的實現(xiàn)方法進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下。希望對大家有所幫助2013-10-10
快速解決owin返回json字符串多帶了雙引號"多了重string轉(zhuǎn)義字符串
下面小編就為大家?guī)硪黄焖俳鉀Qowin返回json字符串多帶了雙引號"多了重string轉(zhuǎn)義字符串。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08

