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