This article has been localized into German by the community.
Die MessageBox
WPF bietet mehrere vordefinierte Dialoge zur Benutzung für Ihr Programm an. Der einfachste ist definitiv die Messagebox. Der Zweck ist dem User eine Nachricht anzuzeigen und ihm eine oder mehrere Möglichkeiten zu bieten, darauf zu reagieren.
Die MessageBox wird durch den Aufruf der statischen Show()-Methode verwendet, die eine Reihe von verschiedenen Parametern annehmen kann, um so auszusehen und sich so zu verhalten, wie Sie es wünschen. Wir werden alle verschiedenen Formen in diesem Artikel durchgehen, wobei jede Variante durch die Zeile MessageBox.Show() und einen Screenshot des Ergebnisses dargestellt wird. Am Ende des Artikels finden Sie ein komplettes Beispiel, mit dem Sie alle Varianten testen können.
In ihrer einfachsten Form bekommt die MessageBox einen einzigen Parameter, nämlich die Meldung, der angezeigt werden soll:
MessageBox.Show("Hello, world!");
MessageBox mit einem Titel
Das obige Beispiel ist vielleicht etwas zu mager - ein Titel im Fenster mit der Meldung wäre schon gut. Der zweite und optionale Parameter erlaubt es uns, den Titel anzugeben:
MessageBox.Show("Hello, world!", "My App");
MessageBox mit zusätzlichen Buttons
Standardmäßig hat die MessageBox nur eine Ok-Schaltfläche, aber dies kann geändert werden, falls Sie Ihrem Benutzer eine Frage stellen und nicht nur eine Information anzeigen möchten. Beachten Sie auch, dass der Nachrichtentext mehrere Zeilen hat, indem ich ein Zeilenumbruchzeichen (\n) verwende:
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
Sie steuern, welche Schaltflächen angezeigt werden, indem Sie einen Wert aus der Aufzählung der MessageBoxButton verwenden - in diesem Fall ist eine Schaltfläche Yes, No und Cancel enthalten. Die Buttons erscheinen übrigens immer in der Sprache des Users, in unserem Fall also in Deutsch, dies gilt natürlich nicht für den Text der Nachricht. Die folgenden Werte, die selbsterklärend sein sollten, können für die Buttons verwendet werden:
- OK
- OKCancel
- YesNoCancel
- YesNo
Da es nun mehrere Möglichkeiten der Auswahl durch den Benutzer gibt, benötigen Sie die Information, was der Benutzer gewählt hat. Hierfür gibt die Methode MessageBox.Show() einen Wert aus der Aufzählung MessageBoxResult zurück, den Sie verwenden können. Hier ist ein Beispiel:
MessageBoxResult result = MessageBox.Show("Would you like to greet the world with a \"Hello, world\"?", "My App", MessageBoxButton.YesNoCancel);
switch(result)
{
case MessageBoxResult.Yes:
MessageBox.Show("Hello to you too!", "My App");
break;
case MessageBoxResult.No:
MessageBox.Show("Oh well, too bad!", "My App");
break;
case MessageBoxResult.Cancel:
MessageBox.Show("Nevermind then...", "My App");
break;
}
Durch Verarbeiten des Rückgabewertes von MessageBox.Show() können Sie jetzt auf die Benutzerauswahl reagieren, wie im Codebeispiel und den Screenshots gezeigt.
MessageBox mit einem Symbol
Die MessageBox hat die Möglichkeit, ein vordefiniertes Symbol links neben der Textnachricht anzuzeigen, indem Sie einen vierten Parameter verwenden:
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
Mit Hilfe der MessageBoxImage-Aufzählung können Sie zwischen verschiedenen Symbolen für verschiedene Situationen wählen. Hier ist die komplette Liste:
- Asterisk (identisch zu "Information")
- Error (=Fehlersymbol)
- Exclamation (=identisch zu "Warning")
- Hand (identisch zu "Stop")
- Information (=Info-Symbol)
- None (=Kein Symbol)
- Question (=Fragezeichen)
- Stop (=Stopsymbol)
- Warning (=Warnsymbol)
Die Namen sind ziemlich selbsterklärend, aber spielen Sie ruhig ein bisschen mit den verschiedenen Werten herum oder sehen Sie sich diesen diesen MSDN-Artikel an, in dem jeder Wert erklärt und sogar illustriert wird: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx. Der MessageBoxImage Parameter bestimmt übrigens auch, welcher Systemsound abgespielt wird, wenn die MessageBox erscheint.
MessageBox mit einer Standard-Option
Es gibt immer eine Schaltfläche, die standardmäßig aktiv ist und ausgewählt wird, wenn der User einfach die Eingabetaste drückt, wenn die MessageBox erscheint. Wenn Sie beispielsweise eine MessageBox mit einem "Ja" und einem "Nein" Button anzeigen, ist "Ja" die Standardantwort. Sie können dieses Verhalten jedoch mit einem fünften Parameter auf die Methode MessageBox.Show() ändern:
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
Beachten Sie auf dem Screenshot, wie der "Nein"-Button leicht erhöht ist, um visuell anzuzeigen, dass er ausgewählt ist und aufgerufen wird, wenn der User die Enter- oder Leerzeichen-Taste drückt.
Das vollständige Beispiel
Wie versprochen: Hier kommt das vollständige Beispiel dieses Artikels:
<Window x:Class="WpfTutorialSamples.Dialogs.MessageBoxSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MessageBoxSample" Height="250" Width="300">
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center">
<StackPanel.Resources>
<Style TargetType="Button">
<Setter Property="Margin" Value="0,0,0,10" />
</Style>
</StackPanel.Resources>
<Button Name="btnSimpleMessageBox" Click="btnSimpleMessageBox_Click">Simple MessageBox</Button>
<Button Name="btnMessageBoxWithTitle" Click="btnMessageBoxWithTitle_Click">MessageBox with title</Button>
<Button Name="btnMessageBoxWithButtons" Click="btnMessageBoxWithButtons_Click">MessageBox with buttons</Button>
<Button Name="btnMessageBoxWithResponse" Click="btnMessageBoxWithResponse_Click">MessageBox with response</Button>
<Button Name="btnMessageBoxWithIcon" Click="btnMessageBoxWithIcon_Click">MessageBox with icon</Button>
<Button Name="btnMessageBoxWithDefaultChoice" Click="btnMessageBoxWithDefaultChoice_Click">MessageBox with default choice</Button>
</StackPanel>
</Window>
using System;
using System.Windows;
namespace WpfTutorialSamples.Dialogs
{
public partial class MessageBoxSample : Window
{
public MessageBoxSample()
{
InitializeComponent();
}
private void btnSimpleMessageBox_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!");
}
private void btnMessageBoxWithTitle_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!", "My App");
}
private void btnMessageBoxWithButtons_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
}
private void btnMessageBoxWithResponse_Click(object sender, RoutedEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Would you like to greet the world with a \"Hello, world\"?", "My App", MessageBoxButton.YesNoCancel);
switch(result)
{
case MessageBoxResult.Yes:
MessageBox.Show("Hello to you too!", "My App");
break;
case MessageBoxResult.No:
MessageBox.Show("Oh well, too bad!", "My App");
break;
case MessageBoxResult.Cancel:
MessageBox.Show("Nevermind then...", "My App");
break;
}
}
private void btnMessageBoxWithIcon_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
}
private void btnMessageBoxWithDefaultChoice_Click(object sender, RoutedEventArgs e)
{
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
}
}
}