Laden...

[Snippet] Vorlage für Tray-/NotifyIcon-Anwendung

Erstellt von herbivore vor 16 Jahren Letzter Beitrag vor 15 Jahren 16.413 Views
herbivore Themenstarter:in
49.485 Beiträge seit 2005
vor 16 Jahren
[Snippet] Vorlage für Tray-/NotifyIcon-Anwendung

Beschreibung:

Das folgende Snippet ist eine Vorlage für eine Anwendung, die beim Start ein NotifyIcon mit Kontextmenü erzeugt, aber kein Form öffnet. Das Öffnen von Forms ist aber über das Kontextmenü nachträglich möglich.

NotifyIcons sind die kleinen Symbole unten rechts in der Taskleiste (Tray).

Damit eignet sich diese Vorlage für Anwendungen, bei denen das NotifyIcon und nicht die Forms im Vordergrund stehen.

using System;
using System.Windows.Forms;
using System.Drawing;

//*****************************************************************************
static class MyNotifyIconApplication
{
   private static NotifyIcon  notico;

   //==========================================================================
   public static void Main (string [] astrArg)
   {
      ContextMenu cm;
      MenuItem    miCurr;
      int         iIndex = 0;

      // Kontextmenü erzeugen
      cm = new ContextMenu ();

      // Kontextmenüeinträge erzeugen
      miCurr = new MenuItem ();
      miCurr.Index = iIndex++;
      miCurr.Text = "&Aktion 1";           // Eigenen Text einsetzen
      miCurr.Click += new System.EventHandler (Action1Click);
      cm.MenuItems.Add (miCurr);

      // Kontextmenüeinträge erzeugen
      miCurr = new MenuItem ();
      miCurr.Index = iIndex++;
      miCurr.Text = "&Beenden";
      miCurr.Click += new System.EventHandler (ExitClick);
      cm.MenuItems.Add (miCurr);

      // NotifyIcon selbst erzeugen
      notico = new NotifyIcon ();
      notico.Icon = new Icon("smile.ico"); // Eigenes Icon einsetzen
      notico.Text = "Doppelklick mich!";   // Eigenen Text einsetzen
      notico.Visible = true;
      notico.ContextMenu = cm;
      notico.DoubleClick += new EventHandler (NotifyIconDoubleClick);

      // Ohne Appplication.Run geht es nicht
      Application.Run ();
   }

   //==========================================================================
   private static void ExitClick (Object sender, EventArgs e)
   {
      notico.Dispose ();
      Application.Exit ();
   }

   //==========================================================================
   private static void Action1Click (Object sender, EventArgs e)
   {
      // nur als Beispiel:
      // new MyForm ().Show ();
   }

   //==========================================================================
   private static void NotifyIconDoubleClick (Object sender, EventArgs e)
   {
      // Was immer du willst
   }
}

Schlagwörter: NotifyIcon, Tray, Systemtray, Statusbereich, Taskbar, Taskleiste, Programmleiste, Icon, Symbol, ContextMenu, Kontextmenü, Anwendung, Programm, Anwendungsrahmen, Programmrahmen, 1000 Worte

Quelle: myCSharp.de

Siehe auch: [Artikel] Windows Tray Applikationen (NotifyIcon)

T
35 Beiträge seit 2007
vor 15 Jahren

Hallo,
ich hab es gestestet. Wie bekomme ich die Konsole weg. Ich will das nur Systemtray aktiv ist und das es beim Drücken eine Fenster aufgeht. Die Konsole am Anfang stört mich. Wie kann ich es verhindern?

Ist es möglich das man mit dem Maus auf dem Icon drauf kann und dabei das Fenster sich öffnet. Und wenn man von dem Icon weg ist dann soll das Fenster auch verschwinden.

Thx

herbivore Themenstarter:in
49.485 Beiträge seit 2005
vor 15 Jahren

Hallo tamilsuriyan,

Wie bekomme ich die Konsole weg.

du musst den Zieltyp natürlich auf Windows-Forms einstellen (/target:winexe).

Ist es möglich das man mit dem Maus auf dem Icon drauf kann und dabei das Fenster sich öffnet. Und wenn man von dem Icon weg ist dann soll das Fenster auch verschwinden.

Einblenden kannst du das Fenster, immer wenn NotifyIcon.MouseMove kommt. Das Problem ist eher, dass du nicht mitbekommst, wann die Maus das NotifyIcon verlässt. Du könntest das Fenster aber zeitgesteuert ausblenden.

herbivore

699 Beiträge seit 2007
vor 15 Jahren

Hallo herbivore,

wie kann ich eigentlich in deinem Notify oben einen Separator einbauen?
Suche mich da schon die ganze Zeit dumm und dappig, aber bin wohl zu blöd das zu finden.

Grüße Stephan

1.044 Beiträge seit 2008
vor 15 Jahren

Hallo Stipo,

du kannst einen Separator mit dem Binde- oder Minusstrich erzeugen. Dazu musst du einen Eintrag mit einfach einem "-" hinzufügen. Hier ein Beispiel:


        // Einen Separator erzeugen      
        miCurr = new MenuItem();
        miCurr.Index = iIndex++;
        miCurr.Text = "-";
        miCurr.Click += new System.EventHandler(ExitClick);
        cm.MenuItems.Add(miCurr);

zero_x

P.S.: Sollte deine Frage eigentlich nicht besser hier: GUI: Windows-Forms stellen?

699 Beiträge seit 2007
vor 15 Jahren

Hallo zero_x,

danke für das Beispiel. Das hat mir geholfen. Wäre wohl nie drauf gekommen, das es so einfach ist 😉 Hatte schon die ganze MSDN auf den Kopf gestellt.

Grüße Stephan