Die MessageBox-Klasse

Die MessageBox-Klasse

Die MessageBox-Klasse unter C# bietet ähnliche Features wie die von VBA bekannte MsgBox-Funktion. Allerdings ist es erstens eine Klasse und zweitens kann sie natürlich doch noch einiges mehr als das VBA-Pendant. Dieser Artikel zeigt, wie Sie Meldungsfenster unter C# anzeigen und diese mit Texten, Schaltflächen und anderen Elementen ausstatten. Schließlich interessiert uns auch noch, wie wir die vom Benutzer angeklickten Schaltflächen und somit die Antworten auf die in der Meldung gestellten Fragen auswerten können.

Unter C# nutzen wir also eine Klasse namens MessageBox. Diese ist eine statische Klasse, das heißt, dass Sie diese nicht instanzieren müssen, bevor Sie auf ihre Methoden und Eigenschaften zugreifen. Während Sie unter VBA einfach die MsgBox-Funktion unter Angabe des anzuzeigenden Textes aufgerufen haben, brauchen Sie bei der MessageBox eine entsprechende Methode, die in diesem Fall Show heißt.

Im Beispielprojekt zu diesem Artikel haben wir ein einfaches WPF-Fenster mit Schaltflächen gefüllt, welche die in diesem Artikel vorgestellten Meldungsfenster aufruft (siehe Bild 1). Das erste soll einfach nur einen Text anzeigen. Die Methode, die durch das Click-Ereignis der entsprechenden Schaltfläche aufgerufen wird, sieht wie folgt aus und nutzt die erste der zwölf angebotenen Überladungen:

MessageBox mit WPF

Bild 1: MessageBox mit WPF

private void btnEinfacheMeldung_Click(object sender, 
         RoutedEventArgs e) {
     MessageBox.Show("Einfache Meldung");
}

Im Gegensatz etwa zum Window-Objekt, das die beiden Methoden Show und ShowDialog zum Anzeigen anbietet, gibt die MessageBox-Klasse nur die Show-Methode her. Das bedeutet allerdings nicht, dass Meldungsfenster nicht als modale Fenster ausgegeben werden – ganz im Gegenteil: Show liefert immer ein modales Fenster. Dementsprechend müssen Sie es erst mit einer der angezeigten Schaltflächen schließen, bevor die aufrufende Methode fortgesetzt wird.

Titel anzeigen

Mit der folgenden Überladung übergeben Sie im zweiten Parameter den anzuzeigenden Titel für die MessageBox:

MessageBox.Show("Meldung mit Titel", "Titelzeile");

Dies sieht dann etwa wie in Bild 2 aus.

MessageBox mit Titelzeile

Bild 2: MessageBox mit Titelzeile

Schaltflächen der MessageBox

Die MessageBox-Klasse kann natürlich noch mehr Schaltflächen liefern als nur eine OK-Schaltfläche. Dazu verwenden Sie eine weitere Überladung, die als ersten Parameter den Text, als zweiten den Titel und als dritten eine Konstante für die anzuzeigenden Schaltflächen entgegennimmt. Die möglichen Werte lauten hier (siehe auch Bild 3):

Auswahl der Schaltflächen-Kombinationen

Bild 3: Auswahl der Schaltflächen-Kombinationen

  • OK
  • OKCancel
  • YesNo
  • YesNoCancel

Die folgende Anweisung ruft beispielsweise das Meldungsfenster aus Bild 4 hervor:

MessageBox mit drei Schaltflächen

Bild 4: MessageBox mit drei Schaltflächen

MessageBox.Show("Meldung mit Schaltflächen", "Titel", MessageBoxButton.YesNoCancel);

Hier ist noch anzumerken, dass die Schließen-Schaltfläche oben rechts nur aktiviert ist, wenn entweder nur eine Schaltfläche angezeigt wird (also OK) oder wenn mehrere Schaltflächen aktiviert sind und sich die Schaltfläche Cancel darunter befindet.

Auf Schaltflächen reagieren

Wenn Sie nicht nur eine einfache OK-Schaltfläche nutzen, wollen Sie sicher erfahren, mit welcher Schaltfläche der Benutzer die MessageBox geschlossen hat. In diesem Fall weisen Sie das Ergebnis einfach einer Variablen zu und werten den Inhalt dieser Variablen danach aus. Die Variable erhält den Typ MessageBoxResult und wird wie folgt zugewiesen:

MessageBoxResult result = MessageBox.Show("Klicken Sie auf eine der Schaltflächen.", "Ja oder Nein", MessageBoxButton.YesNo);

Dies liefert dann die MessageBox aus Bild 5. Danach können Sie den Wert per if-Bedingung prüfen und eine entsprechende Bestätigung ausgeben – natürlich per MessageBox:

Testen der beiden Schaltflächen

Bild 5: Testen der beiden Schaltflächen

if (result==MessageBoxResult.Yes) {
     MessageBox.Show("Sie haben auf 'Ja' geklickt.");
}
else {
     MessageBox.Show("Sie haben auf 'Nein' geklickt.");
}

Für die Antwort gibt es die folgenden Konstanten:

  • Cancel
  • No
  • Ok
  • Yes

Wie oben erwähnt, wird die Schließen-Schaltfläche des Fensters nur aktiviert, wenn entweder nur die OK-Schaltfläche oder aber eine der Kombinationen mit der Cancel-Schaltfläche zum Einsatz kommt. Bei OK als einziger Schaltfläche und Klick auf Schließen oder Escape-Taste lautet das Ergebnis dann OK. Bei Kombinationen mit Cancel und Betätigen von Schließen oder Escape folgt Cancel als Ergebnis.

Icons

Natürlich können Sie mit der MessageBox-Klasse auch Icons einblenden. Dazu verwenden Sie eine weitere Überladung, welche den Parameter MessageBoxImage verwendet. Dafür geben Sie eine der folgenden Konstanten der Auflistung MessageBoxImage an:

  • Asterisk
  • Error
  • Exclamation
  • Hand
  • Information
  • None
  • Question
  • Stop
  • Warning

Ein Beispielaufruf sieht wie folgt aus:

MessageBox.Show("Meldungsfenster mit Icon 'Warning'", "Icons", MessageBoxButton.OK, MessageBoxImage.Warning);

Wie Bild 6 zeigt, liefern die acht verschiedenen Icon-Kon­stanten leider nur vier verschiedene Icons.

Es gibt nur vier verschiedene Icons.

Bild 6: Es gibt nur vier verschiedene Icons.

Standardschaltfläche festlegen

Mit der letzten Option, die wir Ihnen hier vorstellen, legen Sie fest, welche der Schaltflächen als Standard vorbelegt wird und somit den Fokus beim Anzeigen erhält. Hier soll beispielsweise die Schaltfläche Nein als Standard dienen:

MessageBox.Show("Meldungsfenster ...", "Standardschaltflächen", MessageBoxButton.YesNoCancel, MessageBoxImage.Information, MessageBoxResult.No);

Optionen

Es gibt schließlich noch einen Parameter namens MessageBox­Options, der aber für übliche Anwendungen nicht nutzbar ist.

Bitte geben Sie die Zeichenfolge in das nachfolgende Textfeld ein

Die mit einem * markierten Felder sind Pflichtfelder.

Neues aus unseren Magazinen
Listenfeld: Reihenfolge mehrerer Einträge...

Wir haben bereits in mehreren Beiträgen beschrieben, wie Sie die individuelle Reihenfolge von Elementen einer Tabelle über den Inhalt eines Feldes etwa namens »ReihenfolgeID« einstellen können –... [mehr]

Diagramme mit gefilterten Daten

In Ausgabe 2/2019 haben wir in zwei Artikeln die modernen Diagramme von Access vorgestellt. Im vorliegenen Beitrag zeigen wir Ihnen, wie Sie diese abhängig von den in einem Formular angezeigten... [mehr]

Benutzerverwaltung mit verschlüsselten...

Wenn Sie in einer Access-Anwendung Benutzer verwalten wollen, die sich per Benutzername und Kennwort an die Anwendung anmelden, sollten Sie sehr sensibel mit den in der Anwendung gespeicherten... [mehr]

HTML-Tabellen mit fester Kopfzeile

In den vorherigen Ausgaben von Access im Unternehmen und in der aktuellen Ausgabe arbeiten wir in einigen Beiträgen mit dem Webbrowser-Steuerelement und stellen Daten, die wir mit den Bordmitteln... [mehr]

Flexible HTML-Tabellen mit fester Kopfzeile

Im Beitrag »HTML-Tabellen mit fester Kopfzeile« haben wir gezeigt, wie Sie Daten aus einer bestimmten Abfrage in einem Webbrowser-Steuerelement so anzeigen, dass die Spaltenköpfe oben fixiert... [mehr]

Berechtigungen per HTML verwalten

Im Beitrag »Benutzerverwaltung mit verschlüsselten Kennwörtern« stellen wir eine Lösung vor, in der wir die Berechtigungen von Benutzergruppen an Datenbankobjekten definieren. Dort benötigen wir... [mehr]

Benutzer und Berechtigungen ermitteln

In den Beiträgen »Benutzerverwaltung mit verschlüsselten Kennwörtern« und »Berechtigungen per HTML verwalten« haben wir die Voraussetzungen für eine Benutzerverwaltung geschaffen. Im vorliegenden... [mehr]

Zugriffsrechte mit Datenmakros

Es gibt verschiedene Möglichkeiten, auf Basis des aktuell angemeldeten Benutzers sicherzustellen, dass dieser nur die für ihn vorgesehenen Aktionen mit Daten durchführen darf – beispielsweise durch... [mehr]

Kennwörter generieren

Für den einen oder anderen Zweck möchten Sie vielleicht Kennwörter generieren oder in einer Benutzeroberfläche die Möglichkeit zum Generieren von Kennwörtern anbieten. Wenn Sie etwa Benutzer zu... [mehr]

Neuer Datensatz von Frontend zu Backend

Für manche Themen gibt es keine kurze, prägnante Überschrift. In diesem Fall wollen wir zeigen, wie Sie einen neuen Datensatz anlegen, der in einer temporären Tabelle im Frontend gespeichert wird,... [mehr]