タスクトレイにアイコンを表示する方法は、「タスクトレイにアイコンを表示する」で紹介しました。ここでは、タスクトレイのアイコンをアニメーションで表示する方法を説明します。
「タスクトレイにアイコンを表示する」の方法が理解できていれば、これは簡単です。NotifyIconオブジェクトのIconプロパティをタイマーを使って変更させるだけです。
以下に、具体的な例を示します。
'タスクトレイにアニメで表示するアイコン Private tasktrayIcons() As Icon 'アニメで現在表示しているアイコンのインデックス Private currentTasktrayIconIndex As Integer 'フォームのLoadイベントハンドラ Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _ Handles MyBase.Load 'タスクトレイアイコンをフォームのアイコンにする Me.NotifyIcon1.Icon = Me.Icon Me.NotifyIcon1.Visible = True 'タイマーを無効にしておく(初めはアニメしない) Me.Timer1.Enabled = False 'アニメ時は、1秒毎にアイコンを変更する Me.Timer1.Interval = 1000 'タスクトレイにアニメで表示するアイコンを指定する Me.currentTasktrayIconIndex = 0 Me.tasktrayIcons = New Icon() { _ New Icon("C:\anime1.ico"), _ New Icon("C:\anime2.ico"), _ New Icon("C:\anime3.ico"), _ New Icon("C:\anime4.ico")} 'イベントハンドラへの関連付け AddHandler Button1.Click, AddressOf Button1_Click AddHandler Timer1.Tick, AddressOf Timer1_Tick End Sub 'Button1のClickイベントハンドラ Private Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Me.currentTasktrayIconIndex = 0 'タイマーが動いている時は止め、止まっているときは動かす Me.Timer1.Enabled = Not Me.Timer1.Enabled If Me.Timer1.Enabled Then 'アニメを開始したときは、初めのアイコンを表示する Me.ChangeAnimatedTasktrayIcon() Else 'アニメが終了した時は、アイコンを元に戻す Me.NotifyIcon1.Icon = Me.Icon End If End Sub 'Timer1のTickイベントハンドラ Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Me.ChangeAnimatedTasktrayIcon() End Sub 'アニメ表示時にタスクトレイアイコンを変更する Private Sub ChangeAnimatedTasktrayIcon() 'タスクトレイアイコンを変更する Me.NotifyIcon1.Icon = Me.tasktrayIcons(Me.currentTasktrayIconIndex) '次に表示するアイコンを決める Me.currentTasktrayIconIndex += 1 If Me.currentTasktrayIconIndex >= Me.tasktrayIcons.Length Then Me.currentTasktrayIconIndex = 0 End If End Sub
//タスクトレイにアニメで表示するアイコン private Icon[] tasktrayIcons; //アニメで現在表示しているアイコンのインデックス private int currentTasktrayIconIndex; //フォームのLoadイベントハンドラ private void Form1_Load(object sender, EventArgs e) { //タスクトレイアイコンをフォームのアイコンにする this.NotifyIcon1.Icon = this.Icon; this.NotifyIcon1.Visible = true; //タイマーを無効にしておく(初めはアニメしない) this.Timer1.Enabled = false; //アニメ時は、1秒毎にアイコンを変更する this.Timer1.Interval = 1000; //タスクトレイにアニメで表示するアイコンを指定する this.currentTasktrayIconIndex = 0; this.tasktrayIcons = new Icon[] { new Icon(@"C:\anime1.ico"), new Icon(@"C:\anime2.ico"), new Icon(@"C:\anime3.ico"), new Icon(@"C:\anime4.ico")}; //イベントハンドラへの関連付け Button1.Click += new EventHandler(Button1_Click); Timer1.Tick += new EventHandler(Timer1_Tick); } //Button1のClickイベントハンドラ private void Button1_Click(object sender, EventArgs e) { this.currentTasktrayIconIndex = 0; //タイマーが動いている時は止め、止まっているときは動かす this.Timer1.Enabled = !this.Timer1.Enabled; if (this.Timer1.Enabled) { //アニメを開始したときは、初めのアイコンを表示する this.ChangeAnimatedTasktrayIcon(); } else { //アニメが終了した時は、アイコンを元に戻す this.NotifyIcon1.Icon = this.Icon; } } //Timer1のTickイベントハンドラ private void Timer1_Tick(object sender, EventArgs e) { this.ChangeAnimatedTasktrayIcon(); } //アニメ表示時にタスクトレイアイコンを変更する private void ChangeAnimatedTasktrayIcon() { //タスクトレイアイコンを変更する this.NotifyIcon1.Icon = this.tasktrayIcons[this.currentTasktrayIconIndex]; //次に表示するアイコンを決める this.currentTasktrayIconIndex++; if (this.currentTasktrayIconIndex >= this.tasktrayIcons.Length) this.currentTasktrayIconIndex = 0; }
補足:上記の例ではアイコンをファイルから読み込んでいますが、通常はアイコンをリソースとして用意して使うほうがよいでしょう。リソースについては、「Visual Studioでリソースを管理する」などをご覧ください。