DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

タスクトレイにアイコンを表示する

.NET Frameworkでは、NotifyIconコンポーネントを使って簡単にタスクトレイ(タスクバーの通知領域)にアイコンを表示することができます。ここでは、NotifyIconコンポーネントを使ってタスクトレイにアイコンを表示する簡単な例を、Visual Studioのフォームデザイナを使った方法と使わない方法に分けて説明します。

Visual Studioのフォームデザイナを使った方法

以下に、Visual Studioのフォームデザイナを使ってタスクトレイにアイコンを表示する手順を説明します。

  1. 「Windowsフォームアプリケーション」のプロジェクトを新規作成します。(もしすでにプロジェクトが存在しているならば、そのプロジェクトを開きます。)
  2. フォームデザイナでフォームを開きます。(ソリューションエクスプローラでフォームファイルをダブルクリックすることにより、フォームデザイナが開きます。)
  3. 「ツールボックス」から「NotifyIcon」を探し(通常は、「コモンコントロール」内にあります)、フォームにドラッグ&ドロップします。
    ツールボックス
  4. NotifyIconがフォームに配置されると、フォームデザイナの下にアイコンと名前が表示されます。
    フォームに配置されたNotifyIcon
  5. タスクトレイに表示するアイコンをアイコンファイル(.icoファイル)として用意しておきます。Visual Studioを使って一からアイコンファイルを作成するには、メニューの「プロジェクト」-「新しい項目の追加」から「アイコンファイル」を選択すればよいでしょう。
  6. フォームに配置したNotifyIconを選択して、プロパティウィンドウで「Iconプロパティ」を探し、表示するアイコンファイルを選択します。
    Iconプロパティの設定
  7. Visibleプロパティ」が「True」になっていることを確認します。
  8. タスクトレイのアイコンにマウスポインタを移動した時に表示される文字列を、「Textプロパティ」に入力します。
  9. タスクトレイのアイコンを右クリックしたときにコンテキストメニューを表示させたいのであれば、表示させたいメニューをContextMenuStripコントロール(.NET Framework 1.1以前では、ContextMenuコントロール)で作成しておき、NotifyIconの「ContextMenuStripプロパティ」(.NET Framework 1.1以前では、「ContextMenuプロパティ」)に設定します。
  10. タスクトレイのアイコンをクリックした時に何かしたいのであれば、Clickイベントを捕捉します。イベントを捕捉する方法は、「イベントを捕捉する」で説明しています。
  11. 以上です。プロジェクトをビルドして実行すれば、タスクトレイにアイコンが表示さます。
    タスクトレイに表示されたNotifyIcon

Visual Studioのフォームデザイナを使わない方法

次に、Visual Studioのフォームデザイナを使わずに、上記とほぼ同じことを行うコードの例を示します。このコードはフォームクラス内(例えば、Form1クラス内)に書かれているものとします。

VB.NET
コードを隠すコードを選択
Private NotifyIcon1 As System.Windows.Forms.NotifyIcon

'フォームのLoadイベントハンドラ
Private Sub Form1_Load(sender As Object, e As EventArgs) _
    Handles MyBase.Load

    'NotifyIconオブジェクトを作成する
    'Me.componentsが存在しないならば、省略する
    Me.NotifyIcon1 = New System.Windows.Forms.NotifyIcon(Me.components)
    'アイコンを設定する
    Me.NotifyIcon1.Icon = New System.Drawing.Icon("C:\test\app.ico")
    'NotifyIconをタスクトレイに表示する
    Me.NotifyIcon1.Visible = True
    'アイコンの上にマウスポインタを移動した時に表示される文字列
    Me.NotifyIcon1.Text = "NotifyIcon1"
    'アイコンを右クリックしたときに表示するコンテキストメニュー
    'ContextMenuStrip1はすでに用意されているものとする
    Me.NotifyIcon1.ContextMenuStrip = Me.ContextMenuStrip1
    'Clickイベントハンドラを追加する
    AddHandler Me.NotifyIcon1.Click, _
        New EventHandler(AddressOf NotifyIcon1_Click)
End Sub

Private Sub NotifyIcon1_Click(sender As Object, e As EventArgs)
    System.Windows.Forms.MessageBox.Show("アイコンがクリックされました。")
End Sub
C#
コードを隠すコードを選択
private System.Windows.Forms.NotifyIcon NotifyIcon1;

//フォームのLoadイベントハンドラ
private void Form1_Load(object sender, EventArgs e)
{
    //NotifyIconオブジェクトを作成する
    //this.componentsが存在しないならば、省略する
    this.NotifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
    //アイコンを設定する
    this.NotifyIcon1.Icon = new System.Drawing.Icon(@"C:\test\app.ico");
    //NotifyIconをタスクトレイに表示する
    this.NotifyIcon1.Visible = true;
    //アイコンの上にマウスポインタを移動した時に表示される文字列
    this.NotifyIcon1.Text = "NotifyIcon1";
    //アイコンを右クリックしたときに表示するコンテキストメニュー
    //ContextMenuStrip1はすでに用意されているものとする
    this.NotifyIcon1.ContextMenuStrip = this.ContextMenuStrip1;
    //Clickイベントハンドラを追加する
    this.NotifyIcon1.Click += new EventHandler(NotifyIcon1_Click);
}

private void NotifyIcon1_Click(object sender, EventArgs e)
{
    System.Windows.Forms.MessageBox.Show("アイコンがクリックされました。");
}
  • 履歴:
  • 2014/5/19 フォームデザイナを使わない方法を追加。画像を追加など。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • イベントハンドラの意味が分からない、C#のコードをそのまま書いても動かないという方は、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。