.NET TIPS システムトレイ(タスクトレイ)にアイコンを表示するには?デジタルアドバンテージ 遠藤 孝信2005/12/23 |
|
|
OutlookやMSN Messengerなどのように、Windowsアプリケーションではシステムトレイ(タスクトレイ、ステータス領域などとも呼ばれる)にアイコンを表示して、アプリケーションの状態を示したり、アプリケーションのフォームを表示したりするためのショートカットとして利用することができる。
.NET Frameworkのクラス・ライブラリには、システムトレイにアイコンを表示するためのNotifyIconコンポーネントが用意されており、これを使用することにより、上記のようなアプリケーションを簡単に作成できる。
本稿では、以下のような仕様のアプリケーションを作成しながら、NotifyIconコンポーネントの基本的な利用方法についてまとめる。
-
起動時にフォームと同時にシステムトレイにアイコンを表示する
-
アイコンを右クリックして表示されるコンテキスト・メニューの[終了]で、アプリケーションを終了できる。
-
フォームの右上隅にある[閉じる]ボタンのクリックで、フォームを非表示にする(アプリケーションは終了しない)。
-
アイコンのダブルクリックでフォームを表示し、かつアクティブにする。
システムトレイへのアイコンの表示
まずアプリケーションの起動時に、システムトレイにアイコンが表示されるようにしよう。
Visual Studio .NETでWindowsアプリケーションのプロジェクトを新規作成し、[ツールボックス]ウィンドウからNotifyIconコンポーネントをフォーム上にドラッグ&ドロップする。
次に、[プロパティ]ウィンドウにて、Iconプロパティで適当なアイコン・ファイル(.icoファイル)を選択する。ここで指定したアイコンが、システムトレイに表示されるアイコンとなる。この設定を行わなければ、アプリケーションを実行してもシステムトレイにアイコンは表示されない。
また、NotifyIconコンポーネントのTextプロパティに文字列を設定しておけば、それがアイコンのツール・ヒント・テキストとして使用される。これはマウス・カーソルをアイコン上に移動させたときに表示される。
システムトレイ・アイコンにおけるコンテキスト・メニューの表示
続いては、アイコンの右クリックにより[終了]メニューを表示し、それを実行してアプリケーションを終了できるようにする。
これには、ContextMenuコンポーネントをフォーム上にドラッグ&ドロップし、[終了]メニュー項目を追加する。そして[プロパティ]ウィンドウにて、NotifyIconコンポーネントのContextMenuプロパティに、いま作成したContextMenuコンポーネントを設定する。
[終了]メニューの項目を追加したContextMenuコンポーネント |
ここではフォームのメニューとしてデザインするが、メニュー(この画面ではcontextMenu1)をNotifyIconコンポーネントのContextMenuプロパティに設定することにより、アイコンを右クリックしたときに表示されるようになる。□ |
アイコンの[終了]メニューによるアプリケーションの終了
次に、いま追加した[終了]メニュー項目をダブルクリックして、メニュー項目の選択時に実行されるイベント・ハンドラを以下のように記述する。
|
||
コンテキスト・メニューの[終了]のイベント・ハンドラの記述(上:C#、下:VB.NET) |
通常、Windowsフォームを終了させるときにはCloseメソッドを呼び出すが、今回の場合では次の項目で述べているようにCloseメソッド呼び出しにより発生するClosingイベントをキャンセルしてしまうので、ここではApplication.Exitメソッドによりアプリケーションを強制的に終了させる。
また、アプリケーションの終了時にはシステムトレイにアイコンが残ってしまうことがあるので、アイコン(NotifyIconオブジェクト)のVisibleプロパティをfalseに設定して、明示的にシステムトレイから消しておく。
システムトレイ・アイコンを利用したアプリケーションを作成している場合には、アプリケーションが終了したにもかかわらずアイコンが残ってしまい、そのアイコンをマウス・カーソルでなぞってやると消えるという現象がたまに発生することがあるが、そのような場合にはこの方法を試していただきたい。
フォームの[閉じる]ボタン・クリックによるフォームの非表示
システムトレイ・アイコンを表示するような、いわゆる常駐型のアプリケーションでは、フォームの右上隅にある[閉じる]ボタンがクリックされてもアプリケーションを終了させずに、フォームを非表示にするだけの場合が多い。
この動作を実装するには、フォームを閉じようとしたときに発生するClosingイベントのイベント・ハンドラをフォームに追加し、次のように記述する。
|
||
フォームのClosingイベント・ハンドラの記述(上:C#、下:VB.NET) |
このイベント・ハンドラでは、パラメータで渡されるCancelEventArgsオブジェクトのCancelプロパティにtrueを設定することにより、フォームの終了処理をキャンセルできる。
またここでは、フォームのVisibleプロパティにfalseを設定することにより、フォームを非表示にする。
アイコンのダブルクリックによるフォームの表示
最後に、フォームの[閉じる]ボタンにより非表示になったフォームを、システムトレイのアイコンをダブルクリックすることにより再度表示されるようにしよう。
これにはNotifyIconコンポーネントにDoubleClickイベント・ハンドラを追加し、次のように記述する。
|
||
アイコン(NotifyIconコンポーネント)のDoubleClickイベント・ハンドラの記述(上:C#、下:VB.NET) |
ここでは、フォームが最小化されている場合には、フォームのWindowStateプロパティにFormWindowState.Normalを設定することにより、フォームの通常の状態に戻している。
また、フォームのActivateメソッドを呼び出してフォームをアクティブにしている。これにより、フォームがほかのウィンドウに隠れていた場合にも、最前面に表示されるようになる。
カテゴリ:Windowsフォーム 処理対象:NotifyIconコンポーネント カテゴリ:Windowsフォーム 処理対象:システムトレイ 使用ライブラリ:NotifyIconクラス(System.Windows.Forms名前空間) 使用ライブラリ:Applicationクラス(System.Windows.Forms名前空間) 使用ライブラリ:CancelEventArgsクラス(System.ComponentModel名前空間) 使用ライブラリ:FormWindowState列挙体(System.Windows.Forms名前空間) |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|