C# NotifyIconの実装

banner-vs-notify-icon

サンプルプログラムの準備

NotifyIconを実装するには、以下の手順を踏みます。

  1. 適当なIconファイルを用意
    NotifyIconをタスクトレイに表示するために、Iconが必要です。適当なIconファイルを準備しておいて下さい。
  2. プロジェクトにFormを1つ追加する。
    プロジェクトを新規作成すると勝手に作られるForm1.csはそのままにして、NofityIconを実装するフォームを1つ追加します。サンプルでは、FormStart.csという名前にしました。このフォームがNotifyIconを実装するフォームになります。FormStart.csフォーム自体は初期状態では表示しないようにして、タスクトレイ内のNotifyIconのみを表示するようにしていきます。
  3. ContextMenuStripをFormStartフォームに貼り付ける。
    先に追加したサンプル用フォーム「FormStart.cs」にContextMenuStripを追加します。コンテキストメニューには、メニュー項目を追加しておきます。特に、プログラムを終了できる「終了」をメニューで選べるようにしておくと便利です。ContectMenuStripのイベント設定でこれを選ばれたら、Application.Exitを呼び出すようにしておきます。
cs_notifyicon_screen2

NotifyIconの設定

次に、FormStartフォーム内に貼り付けたNotifyIconのプロパティを設定していきます。

cs_notifyicon_screen3

NotifyIconのプロパティの最低限の設定項目は以下のとおりです。

  1. Iconプロパティ
    この項目には、準備しておいたIconファイルを指定してください。
  2. ContextMenuStripプロパティ
    これも前述の章で準備しておいたContextMenuStripを指定して下さい。

Program.csの編集

ここまできたら、最後に、FormStartフォームを表示しないで、NotifyIconだけをタスクバーに表示するように、Program.csファイルを変更します。このファイルには通常以下のような記述があると思います。

static class Program
{
    /// 
    /// アプリケーションのメイン エントリ ポイントです。
    /// 
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new FormMain());
    }
}

これを、以下のように修正します。具体的には、上のソースの11行目を下のソースの11~14行目のように置き換えます。

static class Program
{
    /// 
    /// アプリケーションのメイン エントリ ポイントです。
    /// 
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        using (FormStart frm = new FormStart())
        {
            Application.Run();
        }
    }
}

 これで、デフォルトのForm1.csはそのままメイン画面などの用途で使用し、新しく追加したFormStart.csがNotifyIconを表示します。NotifyIconで設定したContectMenuStripの項目が選択された場合のイベントは、FormStart.csで処理するようにします。

実行してみる

ここでプログラムを実行してみてください。タスクトレイに以下のように自分で設定したアイコンが出るはずです。

cs_notifyicon_screen4

このアイコンを右クリックすると、コンテキストメニューが表示されます。

cs_notifyicon_screen5

いくつかのチューニング

アイコンが消えない現象

このままですと、プログラムが終了する際に、タスクトレイにアイコンが残ったりしますので、その場合は、コンテキストメニューの「終了」などが選択された時に、以下のコードを入れておきます。3行目のコードがそれです。

private void ExitToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.notifyIcon1.Visible = false;
    Application.Exit();
}

バルーンを表示する

バルーンを表示させたい場合は、以下のようなコードを実行します。

private void BaloonToolStripMenuItem_Click(object sender, EventArgs e)
{
    this.notifyIcon1.BalloonTipTitle = "お知らせ";
    this.notifyIcon1.BalloonTipIcon = ToolTipIcon.Info;
    this.notifyIcon1.BalloonTipText = "以下の設定を確認してください。\r\nファイル-オプション設定";
    this.notifyIcon1.ShowBalloonTip(10000);
}
タイトルとURLをコピーしました