|
.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」 |
TechTargetジャパン
- Kinectが切り開く“夢の近未来” (2012/2/2)
日本を含めた世界中でKinect for Windowsセンサー商用版とSDK正式版がリリース。未来のコンピューティングはどう変化するのか? - 3つの視点でネイティブと.NETの適材適所を考察 (2012/1/31)
アプリ開発は「ネイティブ」と「.NET」、どちらが最良? その問いには「適材適所」と答えるしかない。では、“適所”は一体どこかを考察する - SQL Azure Data Sync入門 (2012/1/30)
SQL Azure/SQL Serverデータベース間のデータ同期を簡単に実現するサービスとは? その仕組みや使用手順を解説 - Windows Phoneアプリ市場の現状を分析する (2012/1/27)
Windows Phone のアプリ・ストアに日々登録されている多種多様なアプリ。カテゴリ別のアプリ数は? 市場の現状を明らかにする
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -


