TOC

This article is currently in the process of being translated into Polish (~97% done).

Okna dialogowe:

MessageBox

WPF oferuje kilka różnych okien dialogowych do wykorzystania w tworzonych aplikacjach, ale najprostszym z nich jest zdecydowanie okno komunikatów "MessageBox". Jego jedynym celem jest ukazanie użytkownikowi komunikatu, a następnie zaoferowanie mu jednego lub kilku sposobów udzielenia odpowiedzi na ów komunikat.

MessageBox jest używany przez wywołanie statycznej metody Show(), która może przyjmować szereg różnych parametrów, aby wyglądać i zachowywać się tak jak chcemy. W tym artykule omówimy szereg różnych postaci okna komunikatów. Każda z postaci zostanie przedstawiona linią kodu MessageBox.Show() oraz zrzutem ekranu ukazującym dane okno. Na końcu tego artykułu znajduje się kompletny przykład, który pozwala przetestować wszystkie postaci okna komunikatów.

W najprostszej postaci MessageBox przyjmuje tylko jeden parametr, którym jest komunikat jaki należy wyświetlić:

MessageBox.Show("Hello, world!");

MessageBox z nagłówkiem

Powyższy przykład można uznać za aż zbyt prosty - przydałby się nagłówek dla okna wyświetlającego komunikat. Na szczęście drugi parametr, który jest opcjonalny, pozwala nam określić pożądany nagłówek:

MessageBox.Show("Hello, world!", "My App");

MessageBox z dodatkowymi przyciskami

Domyślnie MessageBox posiada tylko jeden przycisk "OK", ale można to zmienić, jeśli chcesz zadać użytkownikowi pytanie, a nie tylko wyświetlić informację. Zauważ również jak zapisuję pojedynczy komunikat w wielu osobnych liniach. Używam w tym celu znaku końca linii "\n":

MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);

Można decydować które przyciski są wyświetlane za pomocą wartości wyliczeniowej "MessageBoxButton". W przykładzie poniżej wyświetlane są przyciski "Yes", "No" i "Cancel". Można stosować następujące wartości, znaczenia których nie trzeba raczej tłumaczyć:

  • OK
  • OKCancel
  • YesNoCancel
  • YesNo

Teraz gdy dysponujemy wieloma możliwościami wyboru, potrzebujemy sposobu, aby móc dowiedzieć się, jakiego wyboru dokonał użytkownik. Na szczęście, metoda MessageBox.Show() zawsze zwraca wartość wyliczeniową "MessageBoxResult ", której to możemy w tym celu użyć. Oto przykład:

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;
}

Sprawdzając wartość zwróconą przez metodę MessageBox.Show() możemy teraz zareagować na wybór jakiego dokonał użytkownik. Pokazano to na poniższym przykładzie ukazując zarówno kod, jak i zrzuty ekranu ukazujące stosowne okna komunikatów.

MessageBox z ikoną

MessageBox ma możliwość wyświetlania wbudowanej ikony informacyjnej po lewej stronie komunikatu tekstowego, za pomocą czwartego parametru:

MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);

Wykorzystując wartość wyliczeniową "MessageBoxImage" można wybierać spomiędzy szeregu różnych ikon informacyjnych dostosowując się do różnych potrzeb. Oto pełna lista:

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

Same nazwy tych ikon powinny dużo mówić o tym, jak wyglądają, ale nie krępuj się poeksperymentować z różnymi wartościami lub zajrzyj do tego artykułu z Microsoft Docs, gdzie każda wartość została wyjaśniona, a nawet zilustrowana: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx

MessageBox z wyborem domyślnym

MessageBox uruchamia się mając już jeden z przycisków "podświetlony" jako domyślny wybór użytkownika. Przycisk ów zostanie automatycznie wciśnięty, gdy tylko użytkownik naciśnie przycisk "Enter" lub "Spacebar". Na przykład, jeżeli wywołamy MessageBox z przyciskami "Yes" i "No" to przycisk "Yes" będzie odpowiedzią domyślną. Można zmienić to zachowanie stosując piąty parametr w metodzie MessageBox.Show():

MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);

Zauważ na przedstawionym zrzucie ekranu, że przycisk "No" jest "podświetlony", aby wizualnie wskazać że jest wybrany i zostanie automatycznie wciśnięty gdy tylko użytkownik naciśnie przycisk "Enter" lub "Spacebar".

Kompletny przykład

Zgodnie z obietnicą, oto kompletny przykład omawianego w tym artykule okna komunikatów:

<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!