This article has been localized into Polish by the community.
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);
}
}
}