【C#】【Form】 NotifyIcon ~ ポップアップ通知を行うには... ~

■ はじめに

https://blogs.yahoo.co.jp/dk521123/37826442.html
で、Javaでメッセージ通知したが、今度は、C#で実装する。

■ 注意事項

【1】 Icon を設定しないと、ポップアップ通知が表示されない。
 
【2】 デスクトップ通知の文字列は限られる
  => 調べた限りだと、以下の通り。(以降は表示されない)
     + タイトル:全角38文字
     + 内容  :全角76文字

【3】(基本かもしれないが)「Clickイベント」を実装する場合は、右クリックかどうかの判定を入れる
  => 「contextMenuStrip(右クリック対応)」両方を実装している場合は、両方実行されてしまう
       

【3】の対応例

private void notifyIcon1_Click(object sender, EventArgs e)
{
  MouseEventArgs eventArgs = (MouseEventArgs) e;
  if (eventArgs.Button.Equals(MouseButtons.Left))
  {
    // ★左クリックのみ実行する★
    MessageBox.Show("Hello World!");
  }
}

■ 主なプロパティ

BalloonTipIcon

 * バルーンToolTipに関連付けるアイコン
  + None:表示しない
  + Info:インフォメーション
  + Warning:警告
  + Error:エラー

BalloonTipText

 * バルーンToolTipに関連付けるメッセージ

BalloonTipTitle

 * バルーンToolTipに関連付けるタイトル

Icon

 * 表示するアイコン
  => これを指定しないと、デスクトップ通知が表示されない
補足:アイコンファイルについて
 * とりあえずでいいなら、
   [追加]-[新しい項目]-[Visual C#アイコン]-[アイコンファイル]で追加

■ サンプル

例1:Hello World

コントロール構成
 * button1
 * notifyIcon1
   + BalloonTipIcon : Info
   + BalloonTipText : テストです。
   + BalloonTipTitle : Hello World
   + Icon : アイコンファイル
 * contextMenuStrip1 (右クリックで表示するために必要。ContextMenuStrip については、以下の関連記事を参照)
   + Item : exitToolStripMenuItem を追加
ContextMenuStrip ~右クリックを使うには~
https://blogs.yahoo.co.jp/dk521123/22454285.html
コード
using System;
using System.Windows.Forms;

namespace SampleForm
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      this.notifyIcon1.ShowBalloonTip(500);
      this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
    }

    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
      Application.Exit();
    }
  }
}

例2:アイコンを点滅させる

コントロール構成
 * button1
 * notifyIcon1
   + BalloonTipIcon : Info
   + BalloonTipText : テストです。
   + BalloonTipTitle : Hello World
   + Icon : アイコンファイル
 * contextMenuStrip1 (右クリックで表示するために必要)
   + Item : exitToolStripMenuItem を追加
 * Timer (★ 「例1:Hello World」との違い ★)
   + Enabled : true
   + Interval : 1000

※ アイコンを二つ用意する
コード
using SampleForm.Properties;
using System;
using System.Drawing;
using System.Windows.Forms;

namespace SampleForm
{
  public partial class Form1 : Form
  {
    private Icon[] icons;
    private int currentIconIndex;

    public Form6()
    {
      InitializeComponent();

      this.currentIconIndex = 0;
      this.icons = new Icon[] {
        Resources.Icon1,
        Resources.Icon2
      };
    }

    private void button1_Click(object sender, EventArgs e)
    {
      this.notifyIcon1.ShowBalloonTip(500);
      this.notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;
    }

    private void exitToolStripMenuItem_Click(object sender, EventArgs e)
    {
      this.notifyIcon1.Icon = this.Icon;
      Application.Exit();
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
      this.ChangeIcon();
    }

    private void ChangeIcon()
    {
      this.notifyIcon1.Icon = this.icons[this.currentIconIndex];
      this.currentIconIndex++;
      if (this.currentIconIndex >= this.icons.Length)
      {
        this.currentIconIndex = 0;
      }
    }
  }
}


関連記事

Windows Form ~ 目次 ~

https://blogs.yahoo.co.jp/dk521123/8054245.html

ContextMenuStrip ~右クリックを使うには~

https://blogs.yahoo.co.jp/dk521123/22454285.html

JavaWindows の メッセージ通知を行うには...

https://blogs.yahoo.co.jp/dk521123/37826442.html