Notiz mit Alarmfunktionen

Taskleisten-Tools mit Visual C# Express

Richten Sie eine Steuerung im System Tray ein und lassen Sie sich zum Beispiel modale und nicht-modale Dialoge anzeigen. Ausserdem lernen Sie die Instanzen einer Anwendung zu kontrollieren.

Taskleisten-Tools mit Visual C# Express

© Archiv

Taskleisten-Tools mit Visual C# Express

Oft möchte man, dass das Hauptfenster einer Applikation zunächst nicht erscheint. Vielmehr soll sich das Programm im Statusbereich der Taskleiste bereithalten.

Taskleisten-Tools mit Visual C# Express

© Archiv

Der Benutzer kann ein Programm im Statusbereich der Taskleiste über ein Icon oder über dessen Kontextmenü steuern. Das geht über frühere Beiträge hinaus, die sich mit den Grundlagen von Visual C# Express befasst oder datenbankgestützte Anwendungen entwickelt haben.

Hier erfahren Sie nun, neben anderem, wie Sie die Steuerung im System Tray einrichten, modale und nicht-modale Dialoge anzeigen und die Instanz einer Anwendung kontrollieren. Es ist unter EDV-Leuten allgemein üblich, Termine, Aufgabenlisten und vieles andere in mehr oder weniger komplexen Programmen zu verwalten. Das ist sinnvoll. Wie verarbeiten Sie aber Einträge, die sich kurz und knapp in einer Bemerkung zusammenfassen lassen? Hier geht es um die Anwendung, die Sie in der Art eines Notizzettels bequem über die Taskleiste erreichen. Damit haben Sie Ihre Notizen immer per Mausklick zur Hand.

Taskleisten-Tools mit Visual C# Express

© Archiv

Dialog Neue Notiz: Selbst am Sonntag stellt sich der Experte einem Termin!

Legen Sie in Ihrer Visual C# 2005 Express Edition ein neues Projekt mit der Vorlage Windows-Anwendung und dem Projektnamen Notizblock an.

Die Anwendung basiert auf einem Hauptformular und einem Formular zur Eingabe neuer Notizen. Wo Sie die Notizen speichern, können Sie sich aussuchen. Sie können dazu eine Datenbank verwenden, wie Sie es bisher getan haben. Angesichts der zu erwartenden geringen Datenmenge kommt aber auch ein einfaches DataSet in Frage.

Dies können Sie ebenfalls über den Projektmappen-Explorer im Kontextmenü des Projektnamens über Hinzufügen/Neues Element... anlegen. In diesem Fall speichert Visual C# Express die Notizen allein in einem XML-Dokument. Den Mittelpunkt des Hauptformulars bildet eine ListBox, die Sie mit dem DataSet verbinden. Alternativ können Sie auch eine CheckList- Box verwenden. In diesem Fall steht es Ihren Benutzern frei, erledigte Aufgaben mit einem Häkchen zu kennzeichnen, ohne sie sofort löschen zu müssen. Ferner sollten Sie Buttons zum Hinzufügen, Löschen und eventuell für das Bearbeiten von Notizen integrieren. Jede Notiz setzt sich aus einem Beschreibungstext und einem Erledigungsdatum zusammen.

Taskleisten-Tools mit Visual C# Express

© Archiv

Symbolisch: Hier ändern Sie die Icon-Eigenschaft über das Smarttag-Menü.

Für die Anzeige im System Tray benötigen Sie ein NotifyIcon-Steuerelement. Ziehen Sie es einfach aus der Toolbox in Ihr Hauptformular. Visual C# Express legt es dann unten im Komponentenfach ab. Allerdings ist ein NotifyIcon- Steuerelement per Default nicht sichtbar. Sie müssen erst noch im Eigenschaftenfenster über die Eigenschaft Icon ein Symbol zuweisen - oder Sie verwenden dazu das Smarttag. Idealerweise sollte es sich um ein Favicon handeln. Sie können auch das des PC Magazins verwenden. Sie finden es unter den Dateien des Beispielprojekts (Dateiname PC_Magazin.ico). Des Weiteren müssen Sie verhindern, dass beim Programmstart sogleich das Hauptformular erscheint. Das erreichen Sie, indem Sie dessen Eigenschaft WindowState auf Minimized setzen. Vergewissern Sie sich außerdem, dass die Eigenschaft ShowInTaskbar auf False steht.

Das Kontextmenü für das Programmsymbol richten Sie mit einem ContextMenuStrip ein. Die einzelnen Einträge können Sie bequem über das Smarttag des Steuerelements bearbeiten. Wählen Sie dazu Einträge bearbeiten... im Smarttag-Menü des ContextMenuStrip-Steuerelements. Integrieren Sie im Element-Auflistungseditor für jeden Menüeintrag jeweils ein MenuItem und einen Separator. Der Separator dient als Trennzeichen. Sie können ihn deshalb für den letzten Menüeintrag auch weglassen. Sie sollten auf jeden Fall Einträge für Öffnen... und Beenden vorsehen. Neue Notizen können Ihre Benutzer dann aus dem Hauptdialog heraus schreiben. Damit die Menüeinträge auch wirklich angezeigt werden, müssen Sie das ContextMenuStrip noch mit dem NotifyIcon-Steuerelement verbinden. Selektieren Sie dazu das NotifyIcon. Bearbeiten Sie dann dessen ContextMenuStrip-Eigenschaft im Eigenschaftenfenster. Sobald Sie in die Spalte daneben klicken, sollte der Name Ihres ContextMenuStrip-Elements bereits in der Vorauswahl erscheinen. Damit haben Sie bereits alles getan, damit Ihre Applikation in der Taskleiste ausgeführt werden kann.

Taskleisten-Tools mit Visual C# Express

© Archiv

Elementauflistungs-Editor: Hier bearbeiten Sie die einzelnen Einträge für das Kontextmenü.

Sie sollten schon in der frühen Entwicklungsphase daran gehen, die Beenden-Methode zu implementieren. Ansonsten müssen Sie nach jedem Testlauf das Debug-Menü (Auswahl Debuggen beenden) oder die Tastenkombination [Umschalt-F5] bemühen. Selektieren Sie im Komponentenfach das Context- MenuStrip, und klicken Sie dann im Form doppelt auf den Eintrag Beenden. Daraufhin erscheint das Codefenster mit der leeren Click()-Methode für das ToolStripMenuItem:

private void 
toolStripMenuItem2_Click(object sender, 
EventArgs e) 
{ 
if (notifyIcon1.Visible) 
notifyIcon1.Visible = false; 
Application.Exit(); 
}

Insofern Sie die Namen für NotifyIcon und ToolStripMenuItem geändert haben, müssen Sie natürlich diese verwenden. Im Code prüfen Sie, ob das NotifyIcon sichtbar ist und setzen dessen Eigenschaft Visible gegebenenfalls auf false. Danach beenden Sie die Anwendung mit der Methode Exit(). Sie können mit der Auswahl Beenden im Kontextmenü die Anwendung schließen. Um über Öffnen... das Hauptformular aufrufen zu können, setzen Sie in der entsprechenden Methode dessen Visible-Eigenschaft auf true und - falls erforderlich - WindowsState auf Normal.

private void 
toolStripMenuItem1_Click(object sender, 
EventArgs e) 
{ 
if (this.WindowState == 
FormWindowState.Minimized) 
this.WindowState = 
FormWindowState.Normal; 
this.Visible = true; 
}

Eine kleine Korrektur sollten Sie noch vornehmen. Wenn Sie die Anwendung testen, werden Sie feststellen, dass sie jedes Mal vollständig abbricht, sobald Sie den oberen Schließen-Button des Formulars betätigen. Es soll jedoch nur das Formular verschwinden, um sich bei Bedarf sofort wieder zu öffnen. Schließlich erfordert das Design, dass Sie die Anwendung ausschließlich über das Anwendungs-Symbol in der Taskleiste steuern. Sie lösen die Aufgabe, indem Sie das Ereignis FormClosing abfangen. Es tritt ein, kurz bevor das Form geschlossen wird. Markieren Sie Ihr Hauptformular in der Entwurfsansicht, und zeigen Sie im Eigenschaftenfenster die Ereignisliste an. Klicken Sie doppelt auf FormClosing. Damit legen Sie das Grundgerüst der zugehörigen Ereignismethode an. Editieren Sie diese wie folgt:

Taskleisten-Tools mit Visual C# Express

© Archiv

Instanzenkontrolle: Der Notizblock des PC Magazins arbeitet schon.
private void Form1_FormClosing(object 
sender, FormClosingEventArgs e) 
{ 
if (e.CloseReason == 
CloseReason.UserClosing) 
{ 
e.Cancel = true; 
this.Hide(); 
} 
}

Das FormClosingEventArgs-Objekt informiert Sie über den Grund des Schließens. Für den Fall, dass dieses auf das Benutzerverhalten zurückzuführen ist (CloseReason.UserClosing), setzen Sie zunächst den Wert von e.Cancel auf true. Damit verhindern Sie, das Hauptformular vollständig zu schließen, was das Programm grundsätzlich beenden würde. Sie wollen jedoch nur dessen Sichtbarkeit ändern. Das erreichen Sie mit einem Aufruf der Methode Hide(). Diese Methode setzt die Eigenschaft Visible des Formular-Objekts auf false. Die Anweisung this.Visible = false; hätte folglich den gleichen Effekt.

Taskleisten-Tools mit Visual C# Express

© Archiv

Klein, aber fein: Der Notizblock nistet sich in der Taskleiste ein.

In der Click()-Methode des Buttons Neue Notiz gilt es, das zweite Formular aufzurufen. Sie müssen dazu erst eine Instanz der Formularklasse erzeugen - am besten im Konstruktor. In der Click()-Methode rufen Sie dann die Methode ShowDialog() für diese Instanz auf. ShowDialog() liefert einen Rückgabewert vom Typ DialogResult. Mit diesem überprüfen Sie, welchen Button der Benutzer zum Schließen des Fensters verwendet hat. Falls der Anwender OK oder Eintragen gewählt hat, dann schreiben Sie die neue oder geänderte Notiz in die Liste.

Vorzeitiger AbbruchZwar löst der Benutzer ebenfalls das Ereignis FormClosing aus, wenn er Ihre Applikation über den Eintrag Beenden im Kontextmenü des Taskleisten-Symbols schließt. Auch so lässt sich die zugehörige Ereignismethode ausführen. Der Grund für das Schließen ist in diesem Fall jedoch nicht UserClosing, sondern ApplicationExitCall. Doch dabei bricht die Anwendung tatsächlich ab, weil die if-Bedingung e.CloseReason == CloseReason.UserClosing zu false auswertet.

Wie bekommen Sie die Software? Die Visual C# 2005 Express Edition können Sie unter www.getexpress.de kostenfrei laden. Enthalten ist auch den SQL Server 2005 Express. Die Installation sollte in der Regel keine Probleme bereiten. Hinweise finden Sie auf den Seiten von Microsoft.

Modale und nicht-modale Dialoge

Visual C# Express erzeugt das Hauptformular für Ihre Anwendung automatisch, wenn Sie ein neues Projekt anlegen. Um weitere Fenster müssen Sie sich jedoch selbst kümmern. Wenn Sie diese anzeigen wollen, können Sie grundsätzlich zwischen zwei verschiedenen Modi wählen. Während bei nicht-modalen Fenstern andere Dialoge ungehindert weiterlaufen, blockieren modale Dialoge die anderen. Daher entscheiden Sie sich zumeist für modale Fenster. Um diese anzuzeigen, benötigen Sie ein Objekt der betreffenden Form- Klasse. Für dieses verwenden Sie dann die Methode ShowDialog(), Show() hingegen nutzen Sie für nicht-modale Formulare.

Taskleisten-Tools mit Visual C# Express

© Archiv

Smarttags: Auf diese kleinen Helferlein greifen Sie per Mausklick zu.

Schließlich sollten Sie dafür sorgen, dass keine zweite Instanz Ihrer Anwendung aufgerufen werden kann. Dafür ist die Mutex-Klasse im Namespace System. Threading zuständig. Machen Sie diesen Namensraum mit der using-Anweisung bekannt. Instantisieren Sie dann in der Main()-Methode ein Objekt der Mutex-Klasse. Wobei Sie dem Konstruktor drei Parameter übergeben.

Mutex mut = new Mutex(true, "PCM", out 
onlyInstance);

Tipp: Sobald Sie im Code den Namen einer Klasse eingetippt haben, für die ein qualifizierter Zugriff erforderlich ist, weist Sie Visual C# Express auf diese Tatsache hin. Unterhalb des Bezeichners erscheint dann ein kleiner gelber Balken. Sobald Sie mit der Maus darüber fahren, können Sie sich per Smarttag zwischen direktem Zugriff und using-Anweisung entscheiden. Visual C# Express generiert den Code dann automatisch.

Mit dem Wert true für den ersten Parameter weisen Sie dem aktuellen Thread den Besitz des Mutex zu. Dazu müssen Sie wissen, dass ein Mutex immer einem bestimmten Thread zugeordnet ist. Ein anderer Thread, der diesen Mutex abruft, muss so lange warten, bis der erste den Mutex freigibt. Mit dem zweiten Parameter kennzeichnen Sie den Mutex. Der dritte ist ein out-Parameter. Sie dürfen die Variable nicht initialisiert übergeben. Sie erhält ihren Wert vom Konstruktor der Mutex-Instanz. Wobei der Wert true anzeigt, dass dem aufrufenden Thread der Besitz des Mutex gewährt wurde. Das bedeutet, Sie können im Weiteren anhand dieses Wertes prüfen, ob es sich um den ersten Aufruf handelt. Nur für diesen Fall starten Sie die Anwendung.

if (onlyInstance) 
Application.Run(new Form1()); 
else 
MessageBox.Show("Notizblock already 
running", 
"PC Magazin", MessageBoxButtons.OK);

Natürlich lässt sich das Notizblock-Programm nach Belieben erweitern. Wenn Sie wollen, können Sie Ihre User z.B. in Form einer Sprechblase oder per Tonsignal an ein überschrittenes Datum erinnern.

Mehr zum Thema

HTML 5
Webgestaltung

Google Web Designer ist spezialisiert auf HTML5. Ein Vorteil dieses Standards ist das einfache Einbinden von Videos mit dem Element video. Wir zeigen…
Wir verraten, wie Sie Fritzboxen und andere Router vor Hackern schützen.
Fritzbox, Asus, Belkin und Co.

Fritzbox, Asus, Belkin oder DLink - die Liste der geknackten Router ist lang. Hacker stahlen Passwörter oder NAS-Daten. So machen Sie Ihren Router…
Wir führen Sie zur eigenen Windows-App - unserem PC-Magazin-RSS-Feed.
C# und XAML

Wir zeigen, wie Sie Windows 8.1 Apps selbst programmieren können. Lernen Sie das App erstellen an Hand unseres Beispiels: dem RSS-Feed von PC…
Windows Tipps & Tricks: Benutzerrechte unter Windows 8.1
Programme richtig installieren

Wir zeigen Ihnen, wie Sie sich unter Windows 8.1 alle Benutzerrechte verschaffen und Programme richtig installieren.
Windows 8: Starbildschirm
Microsoft Project Siena

Erstellen Sie sich selbst eine App für Windows 8, die auf alle Funktionen Ihres Tablets zugreifen kann, inklusive Kamera, Mikrofon und Lautsprecher.…