Start / Tipps / VB.NET-Tipp 0030: Programm ohne Form starten (nur Systray-Icon)
 
Startseite Up-/Download Tutorials Club Das Team
Rubriken Foren Bücher Tips 'n Tricks Suche


VB.NET-Tipp 0030: Programm ohne Form starten (nur Systray-Icon)


Application.Run() funktioniert auch ohne Form - aber wie gibt man dem Anwender die Möglichkeit eine solche fensterlose Anwendung wieder zu beenden? Eine Möglichkeit ist, ein NotifyIcon im Systray zu platzieren.
Beachten Sie: Bei einer normalen Windows Forms-Anwendung ist das NotifyIcon einfacher und sicherer im Form-Designer einzurichten (incl. Kontextmenu). Dabei erzeugt der Designer auch den erforderlichen Code für die Ressourcenbereinigung.

Schwierigkeitsgrad 1 .NET Framework 2.0, .NET Framework 3.0, .NET Framework 3.5 Visual Basic 2005, Visual Basic 2008
Download des Beispielprojektes Download des Beispielprojektes [9,42 KB]
 
' Dieser Quellcode stammt von http://www.activevb.de
' und kann frei verwendet werden. Für eventuelle Schäden
' wird nicht gehaftet.

' Um Fehler oder Fragen zu klären, nutzen Sie bitte unser Forum.
' Ansonsten viel Spaß und Erfolg mit diesem Source!

' Projektversion:   Visual Studio 2005
' Option Strict:    Aus
' Option Explicit:  An
'
' Referenzen: 
'  - System
'  - System.Data
'  - System.Drawing
'  - System.Windows.Forms
'  - System.Xml
'
' Imports: 
'  - Microsoft.VisualBasic
'  - System
'  - System.Collections
'  - System.Data
'  - System.Diagnostics
'

' ##############################################################################
' ################################ Dialog1.vb ##################################
' ##############################################################################
Public Class Dialog1
   'Im Designer gesetzten Eigenschaften:
   'Form.AcceptButton = Ok_Button
   'Form.CancelButton = Cancel_Button
   'Ok_Button.DialogResult = DialogResult.Ok 
   'Cancel_Button.DialogResult = DialogResult.Cancel 

   Private StartUpTime As TimeSpan

   Public Overloads Shared Sub ShowDialog(ByVal StartupTime As TimeSpan)
      Using D As New Dialog1
         D.StartUpTime = StartupTime
         D.Timer1_Tick(Nothing, EventArgs.Empty)
         D.ShowDialog()
      End Using
   End Sub

   Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As EventArgs) Handles Timer1.Tick
      Me.Label1.Text = String.Format("Seit Programmstart vergingen: {0:HH:mm:ss}", Now - StartUpTime)
   End Sub

End Class

' ##############################################################################
' ################################ modMain.vb ##################################
' ##############################################################################
Imports System.Windows.Forms

Public Module modMain

   Private WithEvents _Notifyer As New NotifyIcon()
   Private WithEvents mnuHelloWorld As New MenuItem("Hello World!")
   Private WithEvents mnuBeenden As New MenuItem("Beenden")

   Private StartUpTime As TimeSpan

   Public Sub Main()
      With _Notifyer
         .Icon = My.Resources.FACE02
         .Text = "Ein Icon im Systemtray, mit KontextMenü"
         .ContextMenu = New ContextMenu(New MenuItem() {mnuHelloWorld, mnuBeenden})
         .Visible = True
      End With
      StartUpTime = Now - Date.MinValue
      ' Hier geht die Anwendung in eine Warteschleife ohne Rückkehr, da
      ' kein MainForm angegeben ist, dessen Schließen die Rückkehr auslösen würde
      Application.Run()
   End Sub

   Private Sub Menu_Click(ByVal sender As Object, ByVal e As EventArgs) _
         Handles mnuHelloWorld.Click, mnuBeenden.Click
      Select Case True
         Case sender Is mnuHelloWorld
            MessageBox.Show("Hello World!")

         Case sender Is mnuBeenden
            'Ressourcenfreigabe: ein polymorphes Array erstellen, mit allen Komponenten, die 
            'IDisposable implementieren - und die in der Schleife disposen
            For Each D As IDisposable In New IDisposable() { _
                  _Notifyer.ContextMenu, _Notifyer, mnuHelloWorld, mnuBeenden}
               D.Dispose()
            Next
            ' das "natürliche" Ende einer Anwendung, nach Schließen des MainForms, wird hier
            ' notgedrungen etwas forciert.
            Application.Exit()
      End Select
   End Sub

   Private Sub _Notifyer_DoubleClick(ByVal sender As Object, ByVal e As EventArgs) _
         Handles _Notifyer.DoubleClick
      Dialog1.ShowDialog(StartUpTime)
   End Sub

End Module

Ihre Meinung

Falls Sie Fragen zu oder Erfahrungen mit diesem Tipp haben, dann sollten Sie diese hier posten. Für alles weitere melden Sie sich bitte in einem zum Thema passendem Forum.

Falls Sie in ihren Kommentar Quellcode einbinden wollen, verwenden Sie bitte Pseudotags: Quellcode Bei VB.NET wird durch ein vorangestelltes [dotnet] markiert und durch [/dotnet] abgeschlossen.

Ihr Name:   
Ihre E-Mailadresse:   
 
Bitte folgende Kontrollnummer eingeben: 2511
Kontrolle:   
 
Ihre Frage/Ihr Kommentar:
Ja, ich möchte weitere Beiträge per E-Mail erhalten
Von Philipp Stephani am 30.08.2006 um 22:17
@Dominic: Du musst nichts einbinden, es handelt sich nur um ein Beispiel zur Verwendung der NotifyIcon-Komponente, das nicht wiederverwertbar ist. Um ein Infobereichssymbol einzurichten, füg einfach deiner Form eine NotifyIcon-Komponente hinzu und leg die Eigenschaften entsprechend fest, du brauchst keine Zeile Code zu schreiben.
Von Dominic am 21.11.2004 um 18:02
Hi,

wie genau muss ich dieses modul einbinden damit meine forum in der tray erscheint?

mfg
Dominic
Von Andreas Baumüller am 24.03.2004 um 21:28
Man sollte natürlich ein "netlogo.ico" schon in seinem Verzeichnis haben.

Ein Hinweis wäre da nicht schlecht gewesen.

Erstellt: 26.08.2003
Aktualisierung: 26.07.2010
  Autor: Spatzenkanonier
E-Mail: Tipps@ActiveVB.de



Copyright © 1998-2010 by ActiveVB
Alle Rechte vorbehalten.