This article has been localized into Ukrainian by the community.
Вікно для повідомлень
WPF містить декілька часто вживаних діалогови вікон, найпростішим із них є MessageBox (вікно для повідомлень). Він призначений для того, щоб показати користувачу повідомлення та дозволити йому вибрати одну з наперед заготовлених відповідей.
Для показу цього вікна потрібно викликати статичний метод Call() класу MessageBox. Цей метод може приймати декілька параметрів. В цій статті ми покажемо чимало прикладів форм (вікон). Кожен з них буде містити виклик методу Show() та скріншот результату. В кінці статті знаходиться код, що містить всі ці приклади.
В цій найпростішій формі, ми вказали лише один параметр - повідомлення, що слід показати:
MessageBox.Show("Hello, world!");
Вікно із заголовком
Верхній приклад, мабуть, надто мінімалістичний - тут явно потрібно додати заголовок. На щастя, другий необов'язковий параметр довзоляє вибрати його.
MessageBox.Show("Hello, world!", "My App");
Вікно з додатковими кнопками
За умовчуванням, ця форма має лише кнопку "OK", але, якщо вам потрібно не лише повідомити користувача, а й задати йому питання, то це можна змінити. До речі, зверніть увагу на символ, який я використав для переносу рядка (\n):
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
Для вибору кнопок слід вибрати одне зі значень переліку MessageBoxButton. В цьому прикладі ми вибрали "YesNoCancel", тим самим включивши відповідні кнопки. Загалом можна використати наступні значення:
- OK
- OKCancel
- YesNoCancel
- YesNo
Тепер, коли користувач має можливість вибирати, слід якось дізнатися його рішення. На шастя, метод MessageBoxResult повертає значення з переліку MessageBoxResult. Ось приклад:
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;
}
При перевірці значення, яке повертає MessageBox.Show(), ви можете дізнатися рішення користувача, як видно з прикладу коду та зі скріншоту.
Вікно зі значком
Ділогові вікна для повідомлень дозаоляють показати один зі стандартних значків з лівого боку від тексту. Для цього слід використати четвертий параметр:
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
Перелік MessageBoxImage дозволяє вибрати один зі значків для різних ситуацій. Ось повний список:
- Asterisk (зірочка)
- Error (помилка)
- Exclamation (вигук)
- Hand (рука)
- Information (інформація)
- None (нічого)
- Question (запитання)
- Stop (стоп)
- Warning (попередження)
Назви досить точно описують вигляд цих значків, однак ось їхній повний ілюстрований список, взятий із офіційної документації Microsoft http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx.
Вікно з вибором за умовчуванням
Ця форма виділяє одну з кнопок в якості вибору за умовчуванням, який можна активувати, натиснувши Enter. Наприклад: у вікні з кнопками "Yes" та "No" цією кнопкою буде "Yes".
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
Зверніть увагу на те, що кнопка "No" злегка припіднята, щоб показати, що вона виділена і буде активована при натиску Enter чи Space.
Приклад, що містить весь код
Як вже було обіцяно, ось повний збірник всіх прикладів зі статті:
<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);
}
}
}