This article has been localized into Czech by the community.
MessageBox
WPF nabízí pro vaši aplikaci několik dialogových prvků, ale nejjednodušší je určitě MessageBox. Jeho jediným účelem je zobrazit uživateli zprávu a poté mu nabídnout způsob, jak na zprávu odpovědět.
MessageBox se používá voláním statické metody Show(), která může mít několik různých parametrů, aby bylo dosaženo požadovaného vzhledu a chování tohoto prvku. V tomto článku si projdeme všechny různé varianty, přičemž každá z nich je představena pomocí řádku kódu MessageBox.Show() a screenshotu s výsledkem. Na konci článku najdete kompletní ukázku, která vám umožní si otestovat všechny varianty.
V základní variantě má MessageBox jediný parametr, což je zpráva, která se má zobrazit:
MessageBox.Show("Hello, world!");
MessageBox s názvem
Předchozí příklad představuje naprosté minimum ve využití tohoto prvku - pravděpodobně by pomohl název v okně zobrazujícím zprávu. Naštěstí nám druhý (na pořadí parametrů zde záleží) a volitelný parametr umožňuje zadat název:
MessageBox.Show("Hello, world!", "My App");
MessageBox s více tlačítky
Ve výchozím nastavení má MessageBox pouze jedno tlačítko Ok, ale to lze změnit v případě, že chcete uživateli položit otázku a ne jenom zobrazit pár informací. Všimněte si také, jak v této zprávě používám více řádků pomocí znaku konce řádku (\n):
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
Tlačítka, která se zobrazí, určujete pomocí hodnoty z následujícího seznamu pro MessageBoxButton - v tomto případě jsou zahrnuta tlačítka Yes, No a Cancel. Lze použít následující hodnoty, ke kterým snad není třeba nic dodávat:
- OK
- OKCancel
- YesNoCancel
- YesNo
Nyní s více možnostmi volby potřebujete zjistit, co si uživatel vybral, a naštěstí metoda MessageBox.Show() vždy vrací hodnotu ze seznamu hodnot pro MessageBoxResult, kterou můžete použít. Zde je příklad:
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;
}
Zjištěním návratové hodnoty metody MessageBox.Show() můžete nyní reagovat na volbu uživatele, jak je vidět v kódu i na screenshotech.
MessageBox s ikonou
MessageBox umožňuje zobrazit předdefinovanou ikonu nalevo od textové zprávy pomocí čtvrtého parametru:
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
Pomocí seznamu hodnot pro MessageBoxImage si můžete vybrat mezi řadou ikon pro různé situace. Zde je jejich kompletní seznam:
- Asterisk (značka v textu)
- Error (chyba)
- Exclamation (vykřičník)
- Hand (raději se koukněte do toho odkazu MSDN níže)
- Information (to je takový překladatelský oříšek...)
- None (nic, žádný symbol)
- Question (otazník)
- Stop (stopka)
- Warning (varování)
Jejich jména by měla být vše vypovídající, ale můžete experimentovat s různými hodnotami nebo se podívat na tento článek z MSDN, kde je každá hodnota vysvětlena: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx
MessageBox s výchozím nastavením
V případě, že uživatel po zobrazení dialogového okna stiskne Enter, MessageBox za nás vybere (vyvolá obslužnou událost Click) to tlačítko, které je nastavené jako defaultní. Pokud například zobrazíte MessageBox s tlačítky „Yes“ a „No“, bude výchozí tlačítko „Yes“. Nicméně toto chování můžete změnit pomocí pátého parametru metody MessageBox.Show():
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
Všimněte si na screenshotu, jak je tlačítko „No“ lehce zvýrazněné, aby bylo zřejmé, že je vybráno, a po stisknutí tlačítka Enter nebo Mezerník bude zavolána jeho obslužná metoda Click (bude na něj kliknuto).
Kompletní ukázka
Jak bylo slíbeno, zde je kompletní ukázka kódu použitého v tomto článku:
<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);
}
}
}