Visual Basic クラスライブラリ詳解 |
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以上) |
主な機能 | システムの通知領域にアイコンを表示する。 |
NotifyIconクラスはシステムの通知領域にアイコンを表示し、そのアイコンを介した操作、表示の機能を提供するクラスです。Windowsアプリケーションで使用するクラスです。
システムの通知領域とはタスクトレイとも呼ばれる部分のことで、通常設定のWindowsでは画面の右下に表示されている部分です。この領域には時計や、主にバックグラウンドで動作するアプリケーションのアイコンが表示されています。
NotifyIconクラスの機能はすべてをプログラムから制御することもできますが、デザイン画面のツールボックスから選択してプロパティウィンドウを使って設定することもできます。この場合はほとんどの設定をコードレスで行えます。
■画像1:タスクバーの通知領域。タスクトレイとも呼ばれる。
どのような手法で扱うにせよ最低限として表示するアイコンを用意する必要があります。これはWinodws標準のアイコンファイル(ico)です。
今回は説明のために以下のアイコンを使用します。すぐに試してみたい方はダウンロードしてください。
■画像2:今回サンプルで使用するアイコン
ダウンロード Iconset.lzh
セットにはこの他に空のアイコン、つまり透明のアイコンが1つ含まれています。
これから説明する例はこれらのアイコンをC:\Test\Icons\フォルダに配置しているという前提で行います。
アイコンが用意できている場合は次のシンプルなコードで通知領域にアイコンを表示することができます。
Dim Notice As New Windows.Forms.NotifyIcon(Me.components)Notice.Icon = New Icon("C:\Test\Icons\Sample1.ico") Notice.Visible = True |
■リスト1:NotifyIconのシンプルな使用例
NotifyIconクラスを生成するためには2種類のコンストラクタが使用できます。ツールボックスからフォームにNotifyIconを配置した場合は自動的にコンストラクタの呼び出しが生成されるので、コンストラクタの呼び出しを自分で記述してはいけません。
コンストラクタは空のコンストラクタとIContainerインターフェースを引数にとるコンストラクタがあります。NotifyIconの消滅のタイミングをすべて自分で制御するのであれば空のコンストラクタを使用します。
Dim Notice As New Windows.Forms.NotifyIcon() |
■リスト2:NotifyIconの生成
そうではなく、Formが消滅するときに自動的にNotifyIconも消滅するようにするにはFormのcomponentsを引数に指定して次のように記述します。
|
■リスト3:NotifyIconの生成
ただし、フォームのcomponentsプロパティはいつでも使用可能とは限りません。このプロパティはフォームにTimerなどのコンポーネントが配置されている場合のみ使用可能になっています。このプロパティについてはここでは説明しません。
新しく生成したNotifyIconクラスのインスタンスはIconプロパティを設定して、VisibleプロパティをTrueにするまでは通知領域には表示されません。
空のコンストラクタを使用してNotifyIconを生成した場合はNotifyIconを消滅させたいタイミングで自分でコードを記述する必要があります。このコードが実行されない場合通知領域のアイコンはアプリケーションが終了しても永遠に表示され続けます。ただし、Windowsが自動的に通知領域のアイコンを整理するタイミングで破棄されます。
NotifyIconを消滅させるにはDisposeメソッドを呼び出します。一時的に表示・非表示を切り替えるだけならばVisibleプロパティを設定します。
NotifyIconクラスには基本的なアイコンの制御を行うために次のメンバを使用します。
名前 | 読み方 | 機能 | |
(コンストラクタ) | NotifyIconクラスを生成する | ||
Icon | アイコン | 表示するアイコンを取得・設定 | |
Text | テキスト | ツールチップヒントの文字列を取得・設定 | |
Visible | ビジブル | アイコンを表示するかを取得・設定 |
■表1
NotifyIconクラスを使用するためには最低限としてIconプロパティを設定し、Visibleプロパティの値をTrueにする必要があります。これだけで設定したアイコンがタスクバーの通知領域に表示されます。
ツールボックスからフォームにNotifyIconを貼り付けた場合はVisibleプロパティの初期値はTrueですが、そうでない場合の初期値はFalseです。
Textプロパティはマウスがアイコンの上にとまったときに表示される文字列を設定します。通常の文字列と同様にvbNewLineを使用して改行を表現することもできます。
Notice = New
Windows.Forms.NotifyIcon |
■リスト4:テキストの設定例
上記のプログラムで表示されるアイコンとテキストは次のとおりです。
■画像3:マウスが来たときに文字列が表示される
NotifyIconクラスには単にアイコンを表示するよりももっとユーザーの注意をひきつけるためにタスクバーの通知領域からバルーンを表示する機能が提供されています。この機能はVB2005以降でのみ使用可能です。
名前 | 読み方 | 機能 | |
BalloonTipIcon | バルーンチップアイコン | バルーンのアイコンを取得・設定 | |
BalloonTipText | バルーンチップテキスト | バルーンに表示する文字を取得・設定 | |
BalloonTipTitle | バルーンチップタイトル | バルーンのタイトルを取得・設定 | |
ShowBalloonTip | ショウバルーンチップ | バルーンを表示する |
■表2
バルーンを表示させるにはShowBalloonTipメソッドを使用します。バルーンの内容はすべてこのメソッドで制御することができます。バルーンに関する他のプロパティはShowBalloonTipメソッドで詳細を省略したときに使用される既定値の役割を果たします。
次のプログラムはすべてをShowBalloonTipメソッドで制御する場合の例です。
Notice.ShowBalloonTip(0, "これがタイトルです。", "これがテキストです。", ToolTipIcon.Info) |
■リスト5:バルーンの表示
■画像4:バルーン
ShowBalloonTipメソッドの第1引数はバルーンが消滅するまでの時間を秒単位で指定します。Windowsではこの値は10〜30の範囲のみ有効です。無効な値が設定された場合は自動的に補正されます。つまり、0を指定しておけば自動的にWindowsの設定に基づいた適切なタイムアウトが設定されることになります。
第4引数のアイコンは自由にアイコンを指定できるのではなく、Windowsにあらかじめ準備されているアイコンを指定する機能です。アイコンの指定にはToolTipIcon列挙体を使用すると便利です。上記の例ではInfoアイコンを指定しています。
次のプログラムはプロパティの設定を使用してバルーンを表示させる例です。
Notice.BalloonTipTitle = "これがタイトルです。" |
■リスト6:バルーンの表示
同じ設定で頻繁にバルーンを表示する場合はこの例のようにあらかじめプロパティを設定しておいて、必要な個所でShowBalloonTipメソッドを呼び出すだけにした方が簡便です。
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の設定
このContextMenuStripをNotifyIconと結びつけるためには次のように記述います。この例では変数NotifyがNotifyIconを示しています。
Notice.ContextMenuStrip = mnuIcon |
■リスト7:メニューとの関連付け
この設定だけでユーザーが通知領域のアイコンを右クリックした場合には自動的にあらかじめ設定しておいたメニューが呼び出されます。
■画像6:右クリックすると自動的にメニューが表示される
メニューと連携する例を掲載しておきます。
Dim Notice As Windows.Forms.NotifyIconPrivate 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 |
Private Sub
mnuIconEnd_Click(ByVal sender
As System.Object,
ByVal e As System.EventArgs)
Handles mnuIconEnd.Click |
■リスト8:メニューとの連携例
NotifyIconやバルーンがクリックされた時にはイベントが発生するので、フォーム上に配置されているButtonやTextBoxなどと同じ感覚でNotifyIconのクリック等に反応したコードを書くことができます。
この目的で使用できるイベントは次のとおりです。
名前 | 読み方 | 機能 | |
BalloonTipClicked | バルーンチップクリックド | バルーンがクリックされた場合に発生します。 | |
BalloonTipClosed | バルーンチップクローズド | バルーンが閉じたときに発生します。 | |
BalloonTipShown | バルーンチップショウン | バルーンが表示された場合に発生します。 | |
Click | クリック | 通知領域のアイコンがクリックされた場合に発生します。 | |
DoubleClick | ダブルクリック | 通知領域のアイコンがダブルクリックされた場合に発生します。 | |
MouseClick | マウスクリック | 通知領域のアイコンがマウスでクリックされた場合に発生します。 | |
MouseDoubleClick | マウスダブルクリック | 通知領域のアイコンがマウスでダブルクリックされた場合に発生します。 | |
MouseDown | マウスダウン | 通知領域のアイコンの上でマウスのボタンを押したときに発生します。 | |
MouseMove | マウスムーブ | 通知領域のアイコンの上をマウスが移動したときに発生します。 | |
MouseUp | マウスアップ | 通知領域のアイコンの上でマウスのボタンを離したときに発生します。 |
■表4
よくある用法はアイコンを右クリックすると操作メニューが表示されるというものですが、これはContextMenuプロパティまたはContextMenuStripプロパティを設定しておくと自動的に行われますので、この目的でイベントを操作する必要がありません。
次のプログラムはアイコンをクリックしたときにフォームを表示する例です。
Private Sub NotifyIcon1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClickIf Me.WindowState = FormWindowState.Minimized Then Me.WindowState = FormWindowState.Normal End If End Sub |
■リスト9:ダブルクリックすると最小化されていたフォームが元の大きさに復元される。
この例ではフォームに貼り付けたNotifyIconを使用しているのでHandles句を使ってイベントプロシージャを結び付けています。自分でプログラムで生成したNotifyIconとイベントを関連付けるにはAddHandlerステートメントを使用します。
次の例ではNotifyIconとDoubleClickイベントを結びつけます。
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) |
■リスト10:イベントとイベントプロシージャを動的に結びつける
このようなイベントの制御に関しては初級講座第10回 イベントプロシージャをご覧ください。
NotifyIconのすべての制御は上述した機能を組み合わせて行うことが可能です。よくある応用例としてアイコンの点滅とアイコンのアニメーションを紹介します。 紹介する例はFormClosedイベントを使用しているためにVB2005以上でないと実行できませんが、ほかの主要な部分はVB.NET(2002)およびVB.NET2003でも実行可能です。
アイコンを点滅させるにはメインのアイコンと空のアイコンを交互に表示します。
この例ではButton1をクリックするとアイコンを表示し、Button2をクリックするとそのアイコンが点滅します。
Dim Notice As Windows.Forms.NotifyIconDim 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 |
Dim IconIndex As
Integer |
Private Sub
Form1_FormClosed(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.FormClosedEventArgs) Handles
Me.FormClosed |
■リスト11:アイコンの点滅
同じ原理でアニメーションを行うこともできます。
この例ではButton1をクリックするとアイコンを表示し、Button2をクリックするとそのアイコンがアニメーションします。
Dim Notice As Windows.Forms.NotifyIconDim 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 |
Dim IconIndex As
Integer |
Private Sub
Form1_FormClosed(ByVal sender
As Object,
ByVal e As
System.Windows.Forms.FormClosedEventArgs) Handles
Me.FormClosed |
■リスト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 | イニシャライズタイムサービス | ||
ReferenceEquals | Object | リファレンスイコールズ | ||
ShowBalloonTip | ショウバルーンチップ | バルーンを表示する | ||
Site | Component | サイト | ||
Tag | タグ | 関連付けた値を取得・設定 | ||
Text | テキスト | ツールチップヒントの文字列を取得・設定 | ||
ToString | Object | トゥーストリング | クラスの完全限定名を返す | |
Visible | ビジブル | アイコンを表示するかを取得・設定 |
■表5