Visual Basic クラスライブラリ詳解
VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

 

Visual Basic 中学校 > クラスライブラリ詳解 > System > Windows > Forms >

NotifyIcon

完全限定名 System.Windows.Forms.NotifyIcon
基底クラス System.Object > System.MarshalByRefObject >  System.ComponentModel.Component
インターフェイス IComponent, IDisposable
派生クラス なし
使用頻度 D
バージョン .NET Framework 1.0以上 (VB.NET2002以上)
主な機能 システムの通知領域にアイコンを表示する。

 

1.概要

 

NotifyIconクラスはシステムの通知領域にアイコンを表示し、そのアイコンを介した操作、表示の機能を提供するクラスです。Windowsアプリケーションで使用するクラスです。

システムの通知領域とはタスクトレイとも呼ばれる部分のことで、通常設定のWindowsでは画面の右下に表示されている部分です。この領域には時計や、主にバックグラウンドで動作するアプリケーションのアイコンが表示されています。

NotifyIconクラスの機能はすべてをプログラムから制御することもできますが、デザイン画面のツールボックスから選択してプロパティウィンドウを使って設定することもできます。この場合はほとんどの設定をコードレスで行えます。

■画像1:タスクバーの通知領域。タスクトレイとも呼ばれる。

どのような手法で扱うにせよ最低限として表示するアイコンを用意する必要があります。これはWinodws標準のアイコンファイル(ico)です。

今回は説明のために以下のアイコンを使用します。すぐに試してみたい方はダウンロードしてください。

■画像2:今回サンプルで使用するアイコン

ダウンロード Iconset.lzh

セットにはこの他に空のアイコン、つまり透明のアイコンが1つ含まれています。

これから説明する例はこれらのアイコンをC:\Test\Icons\フォルダに配置しているという前提で行います。

 

アイコンが用意できている場合は次のシンプルなコードで通知領域にアイコンを表示することができます。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

Dim Notice As New Windows.Forms.NotifyIcon(Me.components)
Notice.Icon = New Icon("C:\Test\Icons\Sample1.ico")
Notice.Visible = True

■リスト1:NotifyIconのシンプルな使用例

 

2.NotifyIconクラスの生成と消滅

 

NotifyIconクラスを生成するためには2種類のコンストラクタが使用できます。ツールボックスからフォームにNotifyIconを配置した場合は自動的にコンストラクタの呼び出しが生成されるので、コンストラクタの呼び出しを自分で記述してはいけません。

コンストラクタは空のコンストラクタとIContainerインターフェースを引数にとるコンストラクタがあります。NotifyIconの消滅のタイミングをすべて自分で制御するのであれば空のコンストラクタを使用します。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応


Dim
Notice As New Windows.Forms.NotifyIcon()
 

■リスト2:NotifyIconの生成

 

そうではなく、Formが消滅するときに自動的にNotifyIconも消滅するようにするにはFormcomponentsを引数に指定して次のように記述します。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応


Dim
Notice As New Windows.Forms.NotifyIcon(Me.components)
 

■リスト3:NotifyIconの生成

ただし、フォームのcomponentsプロパティはいつでも使用可能とは限りません。このプロパティはフォームにTimerなどのコンポーネントが配置されている場合のみ使用可能になっています。このプロパティについてはここでは説明しません。

新しく生成したNotifyIconクラスのインスタンスはIconプロパティを設定して、VisibleプロパティをTrueにするまでは通知領域には表示されません。

 

空のコンストラクタを使用してNotifyIconを生成した場合はNotifyIconを消滅させたいタイミングで自分でコードを記述する必要があります。このコードが実行されない場合通知領域のアイコンはアプリケーションが終了しても永遠に表示され続けます。ただし、Windowsが自動的に通知領域のアイコンを整理するタイミングで破棄されます。

NotifyIconを消滅させるにはDisposeメソッドを呼び出します。一時的に表示・非表示を切り替えるだけならばVisibleプロパティを設定します。

 

3.アイコンの表示

 

NotifyIconクラスには基本的なアイコンの制御を行うために次のメンバを使用します。

  名前 読み方 機能
  (コンストラクタ)   NotifyIconクラスを生成する
プロパティ Icon アイコン 表示するアイコンを取得・設定
プロパティ Text テキスト ツールチップヒントの文字列を取得・設定
プロパティ Visible ビジブル アイコンを表示するかを取得・設定

■表1

NotifyIconクラスを使用するためには最低限としてIconプロパティを設定し、Visibleプロパティの値をTrueにする必要があります。これだけで設定したアイコンがタスクバーの通知領域に表示されます。

ツールボックスからフォームにNotifyIconを貼り付けた場合はVisibleプロパティの初期値はTrueですが、そうでない場合の初期値はFalseです。

Textプロパティはマウスがアイコンの上にとまったときに表示される文字列を設定します。通常の文字列と同様にvbNewLineを使用して改行を表現することもできます。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

Notice = New Windows.Forms.NotifyIcon
Notice.Icon = New Icon("C:\Test\Icons\Sample1.ico"
)
Notice.Text = "これがテキストです。" & vbNewLine &
"改行もできますよ。"
Notice.Visible =
True

■リスト4:テキストの設定例


上記のプログラムで表示されるアイコンとテキストは次のとおりです。

■画像3:マウスが来たときに文字列が表示される

 

4.バルーンの表示

 

NotifyIconクラスには単にアイコンを表示するよりももっとユーザーの注意をひきつけるためにタスクバーの通知領域からバルーンを表示する機能が提供されています。この機能はVB2005以降でのみ使用可能です。

  名前 読み方 機能
プロパティ BalloonTipIcon バルーンチップアイコン バルーンのアイコンを取得・設定
プロパティ BalloonTipText バルーンチップテキスト バルーンに表示する文字を取得・設定
プロパティ BalloonTipTitle バルーンチップタイトル バルーンのタイトルを取得・設定
メソッド ShowBalloonTip ショウバルーンチップ バルーンを表示する

■表2

バルーンを表示させるにはShowBalloonTipメソッドを使用します。バルーンの内容はすべてこのメソッドで制御することができます。バルーンに関する他のプロパティはShowBalloonTipメソッドで詳細を省略したときに使用される既定値の役割を果たします。

次のプログラムはすべてをShowBalloonTipメソッドで制御する場合の例です。

VB2005 対応


Notice.ShowBalloonTip(0, "これがタイトルです。", "これがテキストです。", ToolTipIcon.Info)

■リスト5:バルーンの表示

■画像4:バルーン

ShowBalloonTipメソッドの第1引数はバルーンが消滅するまでの時間を秒単位で指定します。Windowsではこの値は10〜30の範囲のみ有効です。無効な値が設定された場合は自動的に補正されます。つまり、0を指定しておけば自動的にWindowsの設定に基づいた適切なタイムアウトが設定されることになります。

第4引数のアイコンは自由にアイコンを指定できるのではなく、Windowsにあらかじめ準備されているアイコンを指定する機能です。アイコンの指定にはToolTipIcon列挙体を使用すると便利です。上記の例ではInfoアイコンを指定しています。

次のプログラムはプロパティの設定を使用してバルーンを表示させる例です。

VB2005 対応

Notice.BalloonTipTitle = "これがタイトルです。"
Notice.BalloonTipText = "これがテキストです。"
Notice.BalloonTipIcon = ToolTipIcon.Info
Notice.ShowBalloonTip(0)

■リスト6:バルーンの表示

同じ設定で頻繁にバルーンを表示する場合はこの例のようにあらかじめプロパティを設定しておいて、必要な個所でShowBalloonTipメソッドを呼び出すだけにした方が簡便です。

 

5.メニューによる対話

 

NotifyIconクラスはただアイコンを表示するだけではなく、通知領域のアイコンを介してユーザーと対話することもできます。ユーザーと対話するためにはイベントを使用するか、メニューを使用します。

メニューを使って対話するためには次のプロパティを使用します。

  名前 読み方 機能
プロパティ ContextMenu コンテキストメニュー 関連付けられたメニューを取得・設定
プロパティ ContextMenuStrip コンテキストメニューストリップ 関連付けられたメニューを取得・設定

■表3

ContextMenuプロパティとContextMenuStripプロパティは同じ機能ですが、関連付けられるメニューの種類がContextMenuか、ContextMenuStripからの違いがあります。ContextMenuStripはVB2005から導入されたより洗練されたメニューですのでVB2005以降を使用している場合はContextMenuStripプロパティの方を使用するようにします。

ここではContextMenuStripの例を紹介します。VB.NET(2002)およびVB.NET2003を使用されている場合は適宜ContextMenuに読み替えてください。

ContextMenuStripプロパティを使用するにはあらかじめContextMenuStripを生成しておく必要があります。詳細はここでは割愛しますが、ツールボックスからContextMenuStripを選択してフォームに貼り付けてデザイン画面を使用して設定を行っておくと楽です。

たとえば、次のようなContextMenuStripを設定したものとして説明を続けます。

■画像5:デザイナを使用したContextMenuStripの設定

このContextMenuStripNotifyIconと結びつけるためには次のように記述います。この例では変数NotifyNotifyIconを示しています。

VB2005 対応


Notice.ContextMenuStrip = mnuIcon
 

■リスト7:メニューとの関連付け

この設定だけでユーザーが通知領域のアイコンを右クリックした場合には自動的にあらかじめ設定しておいたメニューが呼び出されます。

■画像6:右クリックすると自動的にメニューが表示される

メニューと連携する例を掲載しておきます。

VB2005 対応

Dim Notice As Windows.Forms.NotifyIcon

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Notice = New Windows.Forms.NotifyIcon
    Notice.Icon = New Icon("C:\Test\Icons\Sample1.ico")
    Notice.ContextMenuStrip = mnuIcon
    Notice.Visible =
True

End Sub

Private Sub mnuIconVersion_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuIconVersion.Click

    MsgBox(Application.ProductVersion, MsgBoxStyle.Information, "バージョン情報")

End
Sub

Private Sub mnuIconEnd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuIconEnd.Click

    Me.Close()

End
Sub

■リスト8:メニューとの連携例

 

6.イベントによる対話

 

NotifyIconやバルーンがクリックされた時にはイベントが発生するので、フォーム上に配置されているButtonTextBoxなどと同じ感覚でNotifyIconのクリック等に反応したコードを書くことができます。

この目的で使用できるイベントは次のとおりです。

  名前 読み方 機能
イベント BalloonTipClicked バルーンチップクリックド バルーンがクリックされた場合に発生します。
イベント BalloonTipClosed バルーンチップクローズド バルーンが閉じたときに発生します。
イベント BalloonTipShown バルーンチップショウン バルーンが表示された場合に発生します。
イベント Click クリック 通知領域のアイコンがクリックされた場合に発生します。
イベント DoubleClick ダブルクリック 通知領域のアイコンがダブルクリックされた場合に発生します。
イベント MouseClick マウスクリック 通知領域のアイコンがマウスでクリックされた場合に発生します。
イベント MouseDoubleClick マウスダブルクリック 通知領域のアイコンがマウスでダブルクリックされた場合に発生します。
イベント MouseDown マウスダウン 通知領域のアイコンの上でマウスのボタンを押したときに発生します。
イベント MouseMove マウスムーブ 通知領域のアイコンの上をマウスが移動したときに発生します。
イベント MouseUp マウスアップ 通知領域のアイコンの上でマウスのボタンを離したときに発生します。

■表4

よくある用法はアイコンを右クリックすると操作メニューが表示されるというものですが、これはContextMenuプロパティまたはContextMenuStripプロパティを設定しておくと自動的に行われますので、この目的でイベントを操作する必要がありません。

次のプログラムはアイコンをクリックしたときにフォームを表示する例です。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

Private Sub NotifyIcon1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick

    If
Me.WindowState = FormWindowState.Minimized
Then
   
    Me.WindowState = FormWindowState.Normal
    End
If

End Sub

■リスト9:ダブルクリックすると最小化されていたフォームが元の大きさに復元される。

この例ではフォームに貼り付けたNotifyIconを使用しているのでHandles句を使ってイベントプロシージャを結び付けています。自分でプログラムで生成したNotifyIconとイベントを関連付けるにはAddHandlerステートメントを使用します。

次の例ではNotifyIconDoubleClickイベントを結びつけます。

VB.NET 2002 対応 VB.NET 2003 対応 VB2005 対応

Dim Notice As Windows.Forms.NotifyIcon

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Notice = New Windows.Forms.NotifyIcon
    Notice.Icon = New Icon("C:\Test\Icons\Sample1.ico")
    AddHandler Notice.DoubleClick, AddressOf Notice_DoubleClick
    Notice.Visible =
True

End Sub

Private Sub Notice_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs)

    If
Me.WindowState = FormWindowState.Minimized
Then
       
Me.WindowState = FormWindowState.Normal
    End
If

End Sub

■リスト10:イベントとイベントプロシージャを動的に結びつける

このようなイベントの制御に関しては初級講座第10回 イベントプロシージャをご覧ください。

 

 

7.アイコンの操作

 

NotifyIconのすべての制御は上述した機能を組み合わせて行うことが可能です。よくある応用例としてアイコンの点滅とアイコンのアニメーションを紹介します。 紹介する例はFormClosedイベントを使用しているためにVB2005以上でないと実行できませんが、ほかの主要な部分はVB.NET(2002)およびVB.NET2003でも実行可能です。

アイコンを点滅させるにはメインのアイコンと空のアイコンを交互に表示します。

この例ではButton1をクリックするとアイコンを表示し、Button2をクリックするとそのアイコンが点滅します。

VB2005 対応

Dim Notice As Windows.Forms.NotifyIcon
Dim IconTimer As Timer

Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Notice = New Windows.Forms.NotifyIcon
    Notice.Icon = New Icon("C:\Test\Icons\Sample1.ico")
    Notice.Visible =
True

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    IconTimer = New Timer
    AddHandler IconTimer.Tick, AddressOf IconTimer_Tick
    IconTimer.Interval = 400
    IconTimer.Enabled =
True

End Sub

Dim IconIndex As Integer

Private Sub IconTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)

    If
IconIndex = 0
Then
        Notice.Icon = New Icon("C:\Test\Icons\Sample1.ico")
        IconIndex = 1
   
Else
       
Notice.Icon = New Icon("C:\Test\Icons\Empty.ico")
        IconIndex = 0
    End
If

End Sub

Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

    IconTimer.Dispose()
    Notice.Dispose()

End
Sub

■リスト11:アイコンの点滅

同じ原理でアニメーションを行うこともできます。

この例ではButton1をクリックするとアイコンを表示し、Button2をクリックするとそのアイコンがアニメーションします。

VB2005 対応

Dim Notice As Windows.Forms.NotifyIcon
Dim IconTimer As Timer

Private
Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

Notice = New Windows.Forms.NotifyIcon
Notice.Icon = New Icon("C:\Test\Icons\Sample1.ico")
Notice.Visible =
True

End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

IconTimer = New Timer
AddHandler IconTimer.Tick, AddressOf IconTimer_Tick
IconTimer.Interval = 200
IconTimer.Enabled =
True

End Sub

Dim IconIndex As Integer

Private Sub IconTimer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs)

    Select
Case IconIndex
        Case 0
            Notice.Icon = New Icon("C:\Test\Icons\Sample2.ico")
            IconIndex = 1
        Case 1
            Notice.Icon = New Icon("C:\Test\Icons\Sample3.ico")
            IconIndex = 2
        Case 2
            Notice.Icon = New Icon("C:\Test\Icons\Sample4.ico")
            IconIndex = 3
        Case 3
            Notice.Icon = New Icon("C:\Test\Icons\Sample5.ico")
            IconIndex = 0
    End
Select

End Sub

Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed

    IconTimer.Dispose()
    Notice.Dispose()

End
Sub

■リスト12:アイコンのアニメーション

 

資料:NotifyIconクラスのPublicメンバ

  名前 由来 読み方 機能
プロパティ BalloonTipIcon バルーンチップアイコン バルーンのアイコンを取得・設定
プロパティ BalloonTipText バルーンチップテキスト バルーンに表示する文字を取得・設定
プロパティ BalloonTipTitle バルーンチップタイトル バルーンのタイトルを取得・設定
プロパティ Container Component コンテナ  
プロパティ ContextMenu   コンテキストメニュー 関連付けられたメニューを取得・設定
プロパティ ContextMenuStrip   コンテキストメニューストリップ 関連付けられたメニューを取得・設定
メソッド CreateObjRef MarshalByRefObject クリエイトオービージェイレフ  
メソッド Dispose Component ディスポーズ  
メソッド Equals Object イコールズ  
メソッド GetHashCode Object ゲットハッシュコード  
メソッド GetLifetimeService MarshalByRefObject ゲットライフサービス  
メソッド GetType Object ゲットタイプ  
プロパティ Icon アイコン 表示するアイコンを取得・設定
メソッド InitializeLifetimeService MarshalByRefObject イニシャライズタイムサービス  
メソッドShared ReferenceEquals Object リファレンスイコールズ  
メソッド ShowBalloonTip ショウバルーンチップ バルーンを表示する
プロパティ Site Component サイト  
プロパティ Tag タグ 関連付けた値を取得・設定
プロパティ Text テキスト ツールチップヒントの文字列を取得・設定
メソッド ToString Object トゥーストリング クラスの完全限定名を返す
プロパティ Visible ビジブル アイコンを表示するかを取得・設定

■表5