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

.NET以降、タスクトレイへアイコンを表示するのが非常に楽になっています。

NotifyIconクラスが用意されており、このクラス(コントロール)を使うことにより 容易にタスクトレイへアイコンを追加できます。

タスクトレイへアイコンを追加する

タスクトレイへアイコンを追加するには、フォームへコントロールを追加するかソース中でNotifyIconの インスタンスを作成します。

コントロールをフォームへ配置するには、ツールボックスのNotifyIconを使用します。

NotifyIcon

もうひとつの方法は、NotifyIconをインスタンス化します。

Private WithEvents m_objNotifyIcon As New NotifyIcon

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    ' タスクトレイへ表示するIconを設定
    m_objNotifyIcon.Icon = New Icon("main.ico")
    ' タスクトレイへIconを表示
    m_objNotifyIcon.Visible = True

End Sub

フォームの表示を切り替える

最小化ボタンが押された場合、フォームを非表示にし、タスクトレイのアイコンがダブルクリック された場合、フォームを表示するようにします。

' 最初化時にタスクトレイへアイコン表示
Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
    If Me.WindowState = FormWindowState.Minimized Then
        'フォームを非表示にする
        Me.Visible = False
        m_objNotifyIcon.Icon = m_objIco

        'タスクトレイへIconを表示
        m_objNotifyIcon.Visible = True
    End If
End Sub
' ダブルクリック時にフォームを表示
Private Sub m_objNotifyIcon_MouseDoubleClick(ByVal sender As Object, _
                                             ByVal e As System.Windows.Forms.MouseEventArgs) _
                                             Handles m_objNotifyIcon.MouseDoubleClick
    'フォームを表示する
    Me.Visible = True

    'ウィンドウ状態を元に戻す
    Me.WindowState = FormWindowState.Normal

    'フォームをアクティブにする
    Me.Activate()

    'タスクトレイからアイコンを削除する
    m_objNotifyIcon.Visible = False
End Sub

NotifyIconをWithEventsで宣言することにより、タスクトレイ上でのダブルクリックイベントを 受取るようになります。

タスクトレイのアイコンを右クリックでメニュー表示

タスクトレイのアイコンを右クリックした際、ポップアップメニューがあ表示されるという インターフェイスがあります。

これを実現するには、NotifyIconのContextMenuを使用します。

Private m_objContextMenu As System.Windows.Forms.ContextMenu
Private WithEvents m_objMenuItem01 As System.Windows.Forms.MenuItem


' メニューの生成
m_objContextMenu = New System.Windows.Forms.ContextMenu
m_objMenuItem01 = New System.Windows.Forms.MenuItem

m_objContextMenu.MenuItems.AddRange(New System.Windows.Forms.MenuItem() _
                    {m_objMenuItem01})

' m_objMenuItem01の設定
m_objMenuItem01.Index = 0
m_objMenuItem01.Text = "Item01"

' メニューの関連付け
m_objNotifyIcon.ContextMenu = m_objContextMenu