本文實例講述了C#實現閃動托盤圖標效果的方法。分享給大家供大家參考,具體如下:
在用戶正在登錄QQ或者使用Firemail郵件系統自動收取郵件的時候,托盤圖標會閃動提示用戶正在運行的任務。
閃動圖標可以使用定時切換托盤圖標的方式實現,托盤圖標可以從ImageList控件中獲取。在ImageList控件里面添加三個icon,第一個icon表示窗體啟動以后的托盤圖標。第二個和第三個圖標分別表示當特定的任務發生的時候,定時切換的圖標。
(1)設置托盤的圖標可以從ImageList控件中的Image對象轉換為Icon對象
1
2
3
4
5
6
7
8
9
10
11
|
/// <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)定時器事件實現圖標的切換
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
/// <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 事件,釋放與此窗體關聯的所有資源。因此需要取消關閉事件,實現窗體的隱藏和托盤的顯示功能。
1
2
3
4
5
6
7
8
9
10
11
|
/// <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)托盤關聯菜單有四個功能:
① “顯示” :顯示主窗體、隱藏托盤圖標。
② “運行”:圖標閃動效果,模擬任務正在運行。
③ “停止”:恢復初始化的圖標,模擬任務停止。
④ “退出”:提示用戶并退出應用系統。
完整的代碼如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
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#程序設計有所幫助。