Tanpohp

Tag: trayicon

HowTo – Trayicon mit Contextmenu

by on Apr.18, 2010, under HowTo, MicroMite

Im folgenden geht es um die Erstellung eines Trayicons (oder auch Notifyicon) mit einem ContextmenuTray from Windows. Trayicons sind die kleinen Symbole die links neben der Uhr im Windows angezeigt werden und meist von Instantmessangern und Antivirenprogrammen besetzt werden. Bei mir sieht das in etwa so wie auf nebenstehendem Bild aus.

WPF selbst bietet keine Trayicon-Komponente. Aber im Namespace System.Windows.Forms gibt es eine Klasse NotifyIcon die diesen Zweck erfüllt. Bei einem WPF-Projekt muss jetzt als erstes die passenden Referenz hinzugefügt werden:

  • Klick auf Referenzen -> Referenz hinzufügen
  • Suche nach System.Windows.Forms
  • Ok

Im Anschluss eine Membervariable vom Typ NotifiyIcon erstellen welche im Konstruktor initialisiert wird:

private System.Windows.Forms.NotifyIcon trayicon;
public Window1(){
   trayicon = new System.Windows.Forms.NotifyIcon();
   trayicon.BalloonTipTitle = "BalloonTitle";
   trayicon.BalloonTipText = "BalloonText";
   trayicon.Icon = new System.Drawing.Icon(@"C:\icon.ico");
   trayicon.Text = "Text on hover icon"
   trayicon.MouseClick += new System.Windows.Forms.MouseEventHandler(trayiconClickHandler);
   trayicon.Visible = true;
}

Die meisten Eigenschaften dürften selbsterklärend sein. Falls nicht ist hier die entsprechende Referenz von Microsoft. Der BallonTip ist eine kleine Sprechblase mit Informationen anzeigt. Diese wird mittels ShowBalloonTip(3000) für 3 Sekunden lang angezeigt wird. Ganz wichtig ist die Eigenschaft Visible auf true zu setzen, da diese normalerweise deaktiviert ist. Das NotifyIcon besitzt auch eine Click-Event welches anstelle des MouseClick-Events verwendet werden könnte. Diese bietet allerdings nicht die Möglichkeit zu unterscheiden welche Maustaste gedrückt wurde.

Die Eigenschaft NotifiyIcon.ContextMenu ist vom Typ ein Array aus MenuItems. Bereits bestehende könnten hier folglich wiederverwendet werden:


   System.Windows.Forms.MenuItem[] menuitems= new System.Windows.Forms.MenuItem[2];
   menuitems[0] = new System.Windows.Forms.MenuItem("Go to Google", gotoClickHandler);
   menuitems[1] = new System.Windows.Forms.MenuItem("Exit", exitClickHandler);

Ein MenuItem erwartet eine Beschriftung sowie ein EventHandler welcher beim Klicken aufgerufen wird. Kleine Anmerkung: MenuItem hat eine Eigenschaft MenuItems, es ist also folglich möglich verschachtelte Menüs zu erzeugen. Im folgenden nun die Eventhandler, der das Hauptfenster bei Linksklick öffnet bzw. versteckt:

void trayiconClickHandler(object sender, System.Windows.Forms.MouseEventArgs e)
{
   if (e.Button == System.Windows.Forms.MouseButtons.Left)//right is for context menu
   {
      if (IsVisible) Hide();
      else this.Show();
   }
}

Der erste Eventhandler im Kontextmenu zeigt wie eine beliebige URL im Standardbrwoser aufgerufen werden kann. Der zweite beendet lediglich das Programm:

private void goToMiteClickHandler(object sender, System.EventArgs e)
{
   System.Diagnostics.Process.Start("www.google.de");
}
private void exitClickHandler(object sender, System.EventArgs e)
{
   Close();
}

Alles im Allem also gar nicht so schwer, man muss nur wissen wie.

Comments Off on HowTo – Trayicon mit Contextmenu :, , , , , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!

Visit our friends!

A few highly recommended friends...