TOC

This article has been localized into Czech by the community.

Dialogy:

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ševypoví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);
		}
	}
}
This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!