HOWTO · Csharp
So minimieren Sie Anwendungen in den Infobereich mit C#
Dieser Artikel erklärt, wie Sie eine Windows-Forms-Anwendung mit NotifyIcon in C# in den Infobereich (System Tray) minimieren, das Formular ausblenden und es über das Tray-Symbol wiederherstellen.
Auf dieser Seite
In diesem Artikel erfahren Sie, wie Sie eine Windows-Forms-Anwendung mit C# in den Infobereich (System Tray) statt in die Taskleiste minimieren, sodass die App im Hintergrund weiterläuft und über ein kleines Tray-Symbol erreichbar bleibt.
Warum eine Windows-Forms-App in den Infobereich minimieren
Windows Forms ist das in .NET integrierte GUI-Framework für Desktopanwendungen. Seine Steuerelemente (Schaltflächen, Menüs, Textfelder, Kontrollkästchen usw.) befinden sich im Namespace System.Windows.Forms, und ein Registrierungs- oder Anmeldeformular ist ein typisches Beispiel dafür, was Sie damit erstellen können. Weitere Hintergrundinformationen zu Windows-Forms-Anwendungen finden Sie hier.
Standardmäßig bleibt beim Minimieren einer Windows-Forms-App ihre Schaltfläche in der Taskleiste. Das ist für Anwendungen in Ordnung, zu denen Sie häufig wechseln, aber ein Programm, das nur im Hintergrund laufen muss, verschwendet Platz in der Taskleiste, und die Taskleiste wird schnell unübersichtlich und schwer zu navigieren.
Der Infobereich – der Benachrichtigungsbereich in der unteren rechten Ecke der Taskleiste – ist der übliche Ort für solche Anwendungen. Jede Hintergrund-App wird durch ein kleines Symbol dargestellt: außer Sichtweite, aber dennoch nur einen Klick entfernt. Chat-Clients und Antivirensoftware arbeiten üblicherweise auf diese Weise, und eine App im Infobereich kann den Benutzer bei Bedarf weiterhin mit einer Sprechblasen-Benachrichtigung informieren.
Kurz gesagt: Mit NotifyIcon kann eine Windows-Forms-App in den Infobereich statt in die Taskleiste minimiert werden, während sie weiter ausgeführt wird. Der Rest dieses Artikels zeigt, wie Sie dieses Verhalten einrichten.
NotifyIcon konfigurieren
NotifyIcon ist eine Komponente im Namespace System.Windows.Forms, die das Symbol zeichnet und verwaltet, das Ihre App im Infobereich anzeigt. Es ist kein sichtbares Steuerelement: Wenn Sie die Komponente auf ein Formular ziehen, landet sie in der Komponentenleiste unterhalb des Designers und nicht auf der Formularoberfläche.
Öffnen Sie in Visual Studio die Toolbox und doppelklicken Sie auf NotifyIcon oder ziehen Sie die Komponente auf das Formular:
Dadurch wird dem Formular eine notifyIcon1-Komponente hinzugefügt. Für dieses Tutorial sind die folgenden Eigenschaften wichtig:
Icon: das im Infobereich angezeigte Symbol – die wichtigste Eigenschaft. Sie akzeptiert einSystem.Drawing.Icon, und die Auswahl des Visual Studio-Designers nimmt.ico-Dateien direkt entgegen. Andere Bildformate müssen zuerst im Code in einIconkonvertiert werden; daher bleibt eine.ico-Datei die praktische Wahl für den Infobereich.Text: die QuickInfo, die angezeigt wird, wenn der Cursor über dem Tray-Symbol verharrt.Visible: ob das Symbol im Infobereich erscheint. Behalten SieFalsebei, solange das Formular sichtbar ist, damit die App nicht gleichzeitig die Taskleiste und den Infobereich belegt.BalloonTipTitle,BalloonTipText,BalloonTipIcon: Titel, Text und Symbol für den Schweregrad der Sprechblasen-Benachrichtigung, die vonShowBalloonTipangezeigt wird.
Weisen Sie im Eigenschaftenfenster eine .ico-Datei der Eigenschaft Icon zu und lassen Sie Visible zunächst auf False gesetzt:
Legen Sie die Texteigenschaften dann beim Laden des Formulars fest. Weisen Sie im Form1_Load-Handler notifyIcon1.BalloonTipTitle = "System Tray", notifyIcon1.BalloonTipText = "Some Notification" und notifyIcon1.Text = "System Tray App" zu. Das ausführbare Programm im nächsten Abschnitt zeigt die vollständige Form1_Load-Methode im Kontext.
Die vollständige Memberliste ist in der NotifyIcon-API-Referenz dokumentiert.
Das Formular ausblenden und wiederherstellen
Im Folgenden finden Sie die Schritt-für-Schritt-Anleitung. Die drei Handler – Form1_Load, Form1_Resize und notifyIcon1_MouseDoubleClick – sind Member der partiellen Form1-Klasse, die der Visual Studio-Designer mit Ereignissen verknüpft; sie werden innerhalb eines Windows-Forms-Projekts unter Windows kompiliert und ausgeführt und nicht als eigenständiges Programm.
-
Öffnen Sie Visual Studio und wählen Sie im Startfenster
Create a new projectaus:
-
Wählen Sie die Vorlage
Windows Forms Appund klicken Sie aufNext:
-
Geben Sie einen Projektnamen ein und klicken Sie auf
Create:
-
Ziehen Sie
NotifyIconaus der Toolbox auf das Formular, weisen Sie dann der EigenschaftIconein Symbol zu und lassen SieVisiblewie im vorherigen Abschnitt beschrieben aufFalsegesetzt. Wenn Sie das Symbol auslassen, erscheint beim Ausblenden des Formulars nichts im Infobereich. -
Verknüpfen Sie das
Resize-Ereignis des Formulars. Wählen Sie das Formular aus, öffnen Sie die Ereignisliste im Eigenschaftenfenster (Schaltfläche mit dem Blitzsymbol) und doppelklicken Sie aufResize, umForm1_Resizezu erstellen:
-
Verknüpfen Sie auf dieselbe Weise das
MouseDoubleClick-Ereignis vonnotifyIcon1– wählen SienotifyIcon1in der Komponentenleiste aus, öffnen Sie die Ereignisliste und doppelklicken Sie aufMouseDoubleClick, umnotifyIcon1_MouseDoubleClickzu erstellen. -
Füllen Sie die drei Handler aus. Sie werden im ausführbaren Programm unten im Kontext gezeigt: Fügen Sie in Visual Studio nur die Methoden
Form1_Load,Form1_ResizeundnotifyIcon1_MouseDoubleClickinForm1.csein.
Da die Handler von System.Windows.Forms-Typen abhängen, die nur innerhalb eines Windows-Forms-Projekts vorhanden sind, bettet das folgende Programm sie in kleine Ersatztypen (FormWindowState, MouseEventArgs, NotifyIcon) mit denselben Membernamen ein, damit es eigenständig kompiliert und ausgeführt werden kann. Main übernimmt die Rolle des Benutzers: Die Methode minimiert das Fenster, lässt Resize reagieren und doppelklickt anschließend auf das Tray-Symbol. Führen Sie dieses Beispiel aus:
Der Code sowie die darin angezeigten Bezeichnungen und Ausgaben in diesem Abschnitt bleiben unverändert auf Englisch.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
using System;
// Minimal stand-ins so the handler logic compiles and runs as a plain
// console program. In a real project these types come from
// System.Windows.Forms and the handlers live in the Form1 partial class.
enum FormWindowState { Normal, Minimized }
class MouseEventArgs { }
class NotifyIcon
{
public bool Visible;
public string Text;
public string BalloonTipTitle;
public string BalloonTipText;
public void ShowBalloonTip(int timeout)
{
Console.WriteLine("Balloon tip: " + BalloonTipTitle + " - " + BalloonTipText);
}
}
class Form1
{
FormWindowState WindowState = FormWindowState.Normal;
NotifyIcon notifyIcon1 = new NotifyIcon();
void Hide() { Console.WriteLine("Form hidden"); }
void Show() { Console.WriteLine("Form shown"); }
private void Form1_Load(object sender, EventArgs e)
{
notifyIcon1.BalloonTipTitle = "System Tray";
notifyIcon1.BalloonTipText = "Some Notification";
notifyIcon1.Text = "System Tray App";
}
private void Form1_Resize(object sender, EventArgs e)
{
if (WindowState == FormWindowState.Minimized)
{
this.Hide();
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(1000);
}
else if (FormWindowState.Normal == this.WindowState)
{
notifyIcon1.Visible = false;
}
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show();
notifyIcon1.Visible = false;
WindowState = FormWindowState.Normal;
}
static void Main()
{
Form1 form = new Form1();
form.Form1_Load(null, new EventArgs());
form.WindowState = FormWindowState.Minimized;
form.Form1_Resize(null, new EventArgs());
form.notifyIcon1_MouseDoubleClick(null, null);
form.Form1_Resize(null, new EventArgs());
}
}
Form hidden
Balloon tip: System Tray - Some Notification
Form shown
Resize wird immer dann ausgelöst, wenn sich WindowState ändert, und ist daher die richtige Stelle, um auf das Minimieren zu reagieren. this.Hide() entfernt die Taskleisten-Schaltfläche des Formulars vollständig – ein einfaches Minimieren würde das Fenster nur auf diese Schaltfläche verkleinern. Das Setzen von Visible und der Aufruf von ShowBalloonTip kündigen die Verschiebung an; das Argument 1000 ist die Anzeigedauer der Sprechblase in Millisekunden. Der else if-Zweig blendet das Symbol wieder aus, sobald das Fenster zu Normal zurückkehrt, und deckt damit auch Wiederherstellungen ab, die nicht über das Tray-Symbol erfolgen.
Im Wiederherstellungshandler holt this.Show() das ausgeblendete Formular zurück, WindowState = FormWindowState.Normal hebt die Minimierung auf, und das Symbol wird wieder ausgeblendet, da das Formular nun wieder seine Taskleisten-Schaltfläche hat.
Das Verhalten im Infobereich testen
Führen Sie die Anwendung aus (F5). Das leere Form1-Fenster wird angezeigt:
Zu diesem Zeitpunkt belegt die App die Taskleiste, und dem Infobereich wurde noch nichts hinzugefügt:
Klicken Sie auf die Minimieren-Schaltfläche des Formulars:
Der Form1_Resize-Handler wird ausgelöst: Das Formular und seine Taskleisten-Schaltfläche verschwinden, das Symbol erscheint im Infobereich, und die Sprechblase wird mit dem konfigurierten Titel und Text eingeblendet – dieselbe Abfolge, die das obige ausführbare Programm als seine drei Ausgabezeilen ausgibt:
Doppelklicken Sie auf das Tray-Symbol, um den Wiederherstellungspfad zu bestätigen: Das Formular erscheint wieder im normalen Zustand, seine Taskleisten-Schaltfläche kehrt zurück, und das Tray-Symbol verschwindet. Die Anwendung läuft durchgehend weiter – das Minimieren in den Infobereich ändert nur, wo sie angezeigt wird, nicht ob sie ausgeführt wird.
Wenn das Symbol nach dem Minimieren nie erscheint, prüfen Sie, ob Icon im Designer oder im Code zugewiesen wurde. Ohne ein Symbol zeichnet NotifyIcon nichts (und ShowBalloonTip zeigt nichts an), sodass die ausgeblendete App weiterläuft, ohne dass eine sichtbare Möglichkeit zu ihrer Wiederherstellung besteht.