vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Mails senden, abrufen und decodieren - ganz easy ;-)  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik:    |   VB-Versionen: VB.NET01.06.07
Animiertes TrayIcon mit Kontextmenü (.NET)

Mit diesem Code zeigen wir, wie einfach sich unter VB.NET 2005 ein animiertes TrayIcon im SysTray der Windows-Taskbar erstellen lässt.

Autor:  Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  1.804 
http://www.tools4vb.de/System:  WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt 

Mit nachfolgendem Extra-Tipp zeigen wir, wie einfach sich unter VB.NET 2005 ein animiertes TrayIcon im SysTray der Windows-Taskbar erstellen lässt. Weiterhin erfahren Sie, wie man moderne Ballon Tool-Tipps über dem Icon anzeigen und bei Rechtsklick ein anwendungsspezifisches Kontextmenü einblenden kann.

Für das Anzeigen eines TrayIcons benötigen wir ein NotifyIcon-Objekt, für den Animationseffekt die gewünschten Icons, sowie ein Timer-Objekt. Das Kontextmenü wird mithilfe eines ContextMenuStrip-Objekts erstellt und angezeigt.

Public Class Form1
 
  ' TrayIcon-Objekt
  Dim WithEvents oTrayIcon As NotifyIcon
 
  ' Timer-Objekt
  Dim WithEvents oTimer As Timer
 
  ' animierte IconListe
  Dim oIcons(0 To 2) As Icon
 
  ' aktuelles Icons
  Dim IconCurrent As Integer
 
  ' Kontextmenü-Objekt
  Dim WithEvents oPopUpMenu As ContextMenuStrip

Wie Sie bereits jetzt schon merken, erstellen wir die einzelnen Objekte allesamt zur Laufzeit!

Im Form_Load Ereignis werden zunächst die Icons für den Animationseffekt geladen und anschließend das Kontextmenü generiert, das erscheinen soll, wenn der Anwender mit der rechten Maustaste auf das TrayIcon klickt. Das NotifyIcon-Objekt wird ebenfalls bereits im Form_Load Ereignis erstellt, jedoch bleibt das TrayIcon noch unsichtbar in der Taskbar.

  Private Sub Form1_Load(ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles MyBase.Load
 
    ' Icons laden
    oIcons(0) = New Icon(Application.StartupPath & "\icon1.ico")
    oIcons(1) = New Icon(Application.StartupPath & "\icon1.ico")
    oIcons(2) = New Icon(Application.StartupPath & "\icon1.ico")
 
    ' Kontextmenü erstellen
    oPopUpMenu = New ContextMenuStrip
    With oPopUpMenu.Items
      .Add("Anwendung anzeigen").Tag = "Show"
      .Add("Info...").Tag = "Info"
      .Add("-")
      .Add("Beenden").Tag = "Exit"
    End With
 
    ' TrayIcon-Objekt erstellen, jedoch noch nicht anzeigen
    oTrayIcon = New NotifyIcon
    With oTrayIcon
      ' 1. Icon zuweisen
      .Icon = oIcons(0)
 
      ' Info-ToolTip
      .BalloonTipIcon = ToolTipIcon.Info
      .BalloonTipTitle = "Hinweis"
      .BalloonTipText = "Klicken Sie mit der rechten Maustaste auf das Icon, " & _
        "um das Kontextmenü anzuzeigen."
    End With
 
    ' Timer-Objekt erstellen und Zeit einstellen
    oTimer = New Timer
    oTimer.Interval = 500
  End Sub

Das TrayIcon soll autom. erscheinen, wenn die Form minimiert wird. Gleichzeitig soll die Form aus der Taskbar ausgblendet werden:

  Private Sub Form1_Resize(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles Me.Resize
 
    ' TrayIcon anzeigen, wenn Form minimiert wurde
    If Me.WindowState = FormWindowState.Minimized Then
      If oTrayIcon Is Nothing Then
        ShowTrayIcon
        Me.Hide()
      End If
    End If
  End Sub
  Private Sub ShowTrayIcon()
    ' TrayIcon-Symbol anzeigen
    .Visible = True
 
    ' Timer starten
    oTimer.Start()
  End Sub

Die Animation wird über das Timer-Objekt gesteuert, indem abwechselnd die einzelnen Icon-Symbole nacheinander dem TrayIcon-Objekt zugewiesen werden:

  Private Sub oTimer_Tick(ByVal sender As Object, _
    ByVal e As System.EventArgs) Handles oTimer.Tick
 
    ' Iconsymol wechseln
    IconCurrent = IconCurrent + 1
    If IconCurrent > 2 Then IconCurrent = 0
    oTrayIcon.Icon = oIcons(IconCurrent)
  End Sub

Klickt der Anwender mit der rechten Maustaste auf das TrayIcon-Symbol soll ein das Kontextmenü eingeblendet werden:

  Private Sub oTrayIcon_MouseDown(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.MouseEventArgs) Handles oTrayIcon.MouseDown
 
    ' Bei Rechtsklick auf das TrayIcon, PopUp-Menü öffnen und anzeigen
    If e.Button = Windows.Forms.MouseButtons.Right Then
      oPopUpMenu.Show(Cursor.Position)
    End If
  End Sub

Die Auswahl des Menü-Eintrags erfolgt über das ItemClicked-Ereignis des ContextMenuStrip-Objekts:

  Private Sub oPopUpMenu_ItemClicked(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.ToolStripItemClickedEventArgs) _
    Handles oPopUpMenu.ItemClicked
 
    ' Menü ausblenden ...
    oPopUpMenu.Hide()
 
    ' ... und Auswahl auswerten
    Select Case e.ClickedItem.Tag
      Case "Show"
        ' Anwendung wieder anzeigen
        Me.Show()
        Me.WindowState = FormWindowState.Normal
 
      Case "Info"
        ' Info-Box
        MsgBox("Beispielprojekt, wie man ein animiertes TrayIcon mit " & _
          "BalloonTip und Kontextmenü erstellt.", _
          MsgBoxStyle.Information Or MsgBoxStyle.OkOnly, _
          "Animiertes TrayIcon (VB.NET)")
 
      Case "Exit"
        ' Anwendung beenden
        Me.Close()
    End Select
  End Sub

Beim Beenden der Anwendung muss das TrayIcon aus dem SysTray-Bereich der Windows-Taskbar wieder entfernt werden:

  Private Sub Form1_FormClosing(ByVal sender As Object, _
    ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
 
    ' Timer deaktivieren und zerstören
    If Not oTimer Is Nothing Then
      oTimer.Stop()
      oTimer = Nothing
    End If
 
    ' TrayIcon ausblenden und Objekt zerstören
    If Not oTrayIcon Is Nothing Then
      oTrayIcon.Visible = False
      oTrayIcon = Nothing
    End If
  End Sub
End Class