TOC

This article has been localized into Portuguese by the community.

Diálogos:

O MessageBox

O WPF oferece vários diálogos para o seu aplicativo utilizar, mas o mais simples é definitivamente o MessageBox. Seu único objetivo é mostrar uma mensagem ao usuário e, em seguida, oferecer uma ou várias maneiras para o usuário responder à mensagem.

O MessageBox é usado chamando o método estático Show(), que pode ter vários parâmetros diferentes, para poder parecer e se comportar da maneira que você quer. Estaremos passando por todos os vários formulários neste artigo, com cada variação representada pela linha MessageBox.Show() e uma captura de tela do resultado. No final do artigo, você pode encontrar um exemplo completo que permite testar todas as variações.

Em sua forma mais simples, o MessageBox apenas recebe um único parâmetro, que é a mensagem a ser exibida:

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

MessageBox com um título

O exemplo acima pode ser simples demais - um título na janela que exibe a mensagem provavelmente ajudaria. Felizmente, o segundo parâmetro opcional nos permite especificar o título:

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

MessageBox com botões extras

Por padrão, o MessageBox tem apenas o botão OK, mas isso pode ser alterado, caso você queira fazer uma pergunta ao usuário e não apenas mostrar uma informação. Observe também como eu uso várias linhas nesta mensagem, usando um caractere de quebra de linha (\n):

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

Você controla quais botões são exibidos usando um valor da enumeração MessageBoxButton - nesse caso, um botão Sim, não e Cancelar é incluído. Os seguintes valores, que devem ser auto-explicativos, podem ser usados:

  • OK
  • OKCancel
  • YesNoCancel
  • YesNo

Agora, com várias opções, você precisa de uma maneira de ver o que o usuário escolheu e, felizmente, o método MessageBox.Show() sempre retorna um valor da enumeração MessageBoxResult que você pode usar. Aqui está um exemplo:

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

Ao verificar o valor do resultado do método MessageBox.Show(), agora você pode reagir à escolha do usuário, conforme visto no exemplo de código, bem como nas capturas de tela.

MessageBox com um ícone

O MessageBox tem a capacidade de mostrar um ícone pré-definido à esquerda da mensagem de texto, usando um quarto parâmetro:

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

Usando a enumeração MessageBoxImage, você pode escolher entre um intervalo de ícones para diferentes situações. Aqui está a lista completa:

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

Os nomes devem dizer muito sobre como eles se parecem, mas fique à vontade para experimentar os vários valores ou dar uma olhada neste artigo do MSDN, onde cada valor é explicado e até mesmo ilustrado: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx

MessageBox com uma opção padrão

O MessageBox irá selecionar um botão como a opção padrão, que será o botão invocado se o usuário apenas pressionar Enter quando a caixa de diálogo for mostrada. Por exemplo, se você exibir um MessageBox com um botão "Sim" e "Não", "Sim" será a resposta padrão. Você pode alterar esse comportamento usando um quinto parâmetro para o método MessageBox.Show():

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

Observe na imagem como o botão "No" está com suas extremidades elevadas, isso ocorre para indicar visualmente que o botão está selecionado e que será invocado se o botão Enter ou Space for pressionado.

O exemplo completo

Conforme prometido, aqui temos o exemplo completo usado neste artigo:

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