TOC

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

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!