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

メモ:  Category:vb

.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

bluenote by BBB