20.7 Nachrichtenfenster mit »MessageBox«
Sicherlich sind Ihnen Dialoge wie der in Abbildung 20.5 gezeigte geläufig.
Abbildung 20.5 Ein typisches Nachrichtenfenster
Nachrichtenfenster werden immer modal angezeigt. Das heißt, es kann kein anderes Fenster der Anwendung aktiviert werden, bis das modale Fenster geschlossen wird. Weil Dialoge wie der gezeigte sehr häufig zur einfachen Interaktion mit dem Anwender oder auch nur zur Bereitstellung von Informationen in Anwendungen eingesetzt werden, ist im Namespace System.Windows eine Klasse vordefiniert, mit der bereits sehr viele Anforderungen erfüllt werden können. Es handelt sich um MessageBox. Der abgebildete Dialog beruht auf der folgenden Anweisung:
MessageBox.Show("Wollen Sie die Anwendung schließen?",
"Beenden",
MessageBoxButton.YesNo,
MessageBoxImage.Question,
MessageBoxResult.No);
Listing 20.20 Der Code des Dialogs in Abbildung 20.5
Man braucht eigentlich kaum erklärende Worte zu verlieren, denn der Code beschreibt sich nahezu von selbst: Im ersten Argument wird der Meldungstext übergeben, im zweiten die Beschriftung der Titelleiste, im dritten die anzuzeigenden Schaltflächen. Das vierte Argument beschreibt das Symbol im Clientbereich, und das fünfte und letzte Argument gibt vor, welche Schaltfläche nach dem Start der Anzeige fokussiert werden soll.
20.7.1 Die Methode »MessageBox.Show«
MessageBox verfügt nur über eine typspezifische Methode: Es ist die vielfach überladene statische Methode Show, die mit insgesamt 12 Überladungen aufwartet. Die einfachste ist die, die nur die Zeichenfolge des Meldungstextes entgegennimmt:
MessageBox.Show("Visual C# macht Spaß");
Ein solches Nachrichtenfenster verfügt nur über eine OK-Schaltfläche, die Titelleiste ist leer. Klickt der Anwender auf die Schaltfläche, wird das Meldungsfenster automatisch geschlossen.
Optisch wirkt eine leere Titelleiste stümperhaft. Deshalb werden Sie bestimmt in allen Fällen einen Text vorsehen. Häufig verwendet man dazu den Namen der Anwendung.
In einem dritten Argument können Sie die im Meldungsfenster angezeigten Schaltflächen festlegen. Dazu übergeben Sie eine der in der Enumeration MessageBoxButton vordefinierten Konstanten (siehe Tabelle 20.4).
In welcher Sprache die Schaltflächen beschriftet sind, hängt von der Sprachversion des Betriebssystems ab.
Um im linken Bereich des Meldungsfensters ein Symbol anzuzeigen, wählen Sie eine Konstante aus der folgenden Tabelle 20.5 aus.
Konstante | Beschreibung |
None |
Zeigt kein Symbol an. |
Hand |
Zeigt ein Handsymbol. |
Question |
Zeigt ein Fragezeichen. |
Exclamation |
Zeigt ein Ausrufungszeichen. |
Asterisk |
Zeigt ein Sternchen. |
Stop |
Zeigt ein Stoppsymbol. |
Error |
Zeigt ein Fehlersymbol. |
Warning |
Zeigt ein Warnsymbol. |
Information |
Zeigt ein Informationssymbol. |
Erzeugen Sie ein Meldungsfenster mit mehreren Schaltflächen, kommt der Wahl der vorfokussierten Schaltfläche eine besondere Bedeutung zu. Drückt nämlich der Anwender die -Taste, entspricht das dem Klicken auf die vorfokussierte Schaltfläche. Daher sollte immer die Schaltfläche vorfokussiert werden, bei deren Klicken keine Nachteile entstehen, zum Beispiel durch den Verlust eingegebener, aber nicht gespeicherter Daten. Die Vorfokussierung erfolgt mit Hilfe der Enumeration MessageBoxResult.
Konstante | Beschreibung |
None |
Gibt keinen Wert zurück. |
OK |
Der Anwender hat auf die Schaltfläche OK geklickt. |
Cancel |
Der Anwender hat auf die Schaltfläche Abbrechen geklickt. |
Yes |
Der Anwender hat auf die Schaltfläche Ja geklickt. |
No |
Der Anwender hat auf die Schaltfläche No geklickt. |
Diese Aufzählung dient gleichzeitig als Rückgabewert der Show-Methode, denn schließlich muss nach dem Aufruf und dem Schließen des Nachrichtenfensters per Code geprüft werden, welche der angebotenen Schaltflächen der Anwender gedrückt hat. Nur für den Fall, dass das Meldungsfenster nur einen OK-Button hat, erübrigt sich die Auswertung.
Im folgenden Ereignishandler einer Schaltfläche wird ein Meldungsfenster angezeigt, das den Anwender um die Bestätigung bittet, ob er die Anwendung schließen möchte oder nicht. Der Code reagiert in Abhängigkeit von der im Meldungsfenster gewählten Schaltfläche.
string message = "Möchten Sie die Daten speichern?";
MessageBoxResult result= MessageBox.Show(message,
"Meine Anwendung",
MessageBoxButton.OKCancel,
MessageBoxImage.Question,
MessageBoxResult.OK);
if(result == MessageBoxResult.OK)
[...]
else
[...]
Listing 20.21 Auswertung mit »if-else«
In einer if-Anweisung wird der Rückgabewert überprüft. Hat der Anwender OK angeklickt, werden die Daten gespeichert, ansonsten kann eine andere Reaktion erfolgen. Wahrscheinlich wird in diesem Fall keine Reaktion erforderlich sein.
Alternativ könnte der gesamte if-Block auch durch switch-case ersetzt werden:
switch( result) {
case MessageBoxResult.OK:
// Daten speichern
break;
case MessageBoxResult.Cancel:
// andere Anweisungen
break;
}
Listing 20.22 Auswertung mit »switch«
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.