This article has been localized into Spanish by the community.
El MessageBox: La caja de mensajes
WPF ofrece varios diálogos para que tu aplicación los utilice, pero MessageBox es definitivamente el más sencillo. Su único propósito es mostrar un mensaje al usuario y luego darle múltiples formas de responder al mensaje.
MessageBox se utiliza llamando al método estático Show(), que puede recibir una gama de diferentes parámetros para ser capaz de verse y comportarse de la forma que tu quieres. Iremos a través de todas las diversas formas en este artículo, con cada variación representada por la línea MessageBox.Show() y una captura de pantalla del resultado. Al final del artículo puedes encontrar un ejemplo completo que te permite probar todas las variaciones
En su forma más sencilla MessageBox solamente recibe un parámetro, qué es el mensaje que se mostrará:
MessageBox.Show("Hello, world!");
MessageBox con título
El ejemplo anterior podría ser un poco básico - probablemente un título en la ventana que muestra el mensaje sea útil-. Afortunadamente, el segundo parámetro opcional nos permite especificar el título:
MessageBox.Show("Hello, world!", "My App");
MessageBox con botones extra
Por defecto MessageBox solo tiene el botón de Ok, pero esto puede ser modificado, en caso de que quieras realizar una pregunta a tu usuario y no solo mostrarle algo de información. También observa como utilizo varias líneas en este mensaje utilizando el carácter de salto de línea (\n):
MessageBox.Show("This MessageBox has extra options.\n\nHello, world?", "My App", MessageBoxButton.YesNoCancel);
Tu controlas que botones son mostrados usando un valor del enumerador MessageBoxButton -en este caso, los botones Yes, No y Cancel son incluidos-. Los siguientes valores, que deberían explicarse por sí mismos, se pueden utilizar:
- OK
- OKCancel
- YesNoCancel
- YesNo
Ahora, con múltiples opciones, necesitas una forma de poder ver lo que el usuario eligió y afortunadamente, el método MessageBox.Show () siempre devuelve un valor de el enumerador MessageBoxResult que puedes usar. Aquí hay un ejemplo:
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;
}
Al verificar el valor del resultado del método MessageBox.Show (), ahora puedes reaccionar ante la elección del usuario, como se ve en el ejemplo del código y en las capturas de pantalla.
MessageBox con un ícono
MessageBox tiene la capacidad de mostrar un icono predefinido a la izquierda del mensaje de texto, utilizando un cuarto parámetro:
MessageBox.Show("Hello, world!", "My App", MessageBoxButton.OK, MessageBoxImage.Information);
Usando el enumerador MessageBoxImage , puedes elegir entre un rango de iconos para diferentes situaciones. Esta es la lista completa:
- Asterisk (Asterisco)
- Error
- Exclamation (Exclamación)
- Hand (Mano)
- Information (información)
- None (Ninguno)
- Question (Pregunta)
- Stop (Alto)
- Warning (Advertencia)
Los nombres deberían deberían decir mucho sobre como lucen, pero siéntete libre de experimentar con los diferentes valores, o checa este artículo de MSDN, donde cada valor es explicado e incluso ilustrado: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx
MessageBox con una opción por defecto
MessageBox seleccionará un botón como la elección predeterminada, que luego será el botón invocado en caso de que el usuario simplemente presione Enter una vez que se muestra el cuadro de diálogo. Por ejemplo, si muestras un MessageBox con botón "Yes" y "No", "Yes" será la respuesta predeterminada. Sin embargo, puedes modificar este comportamiento utilizando un quinto parámetro en el método MessageBox.Show ():
MessageBox.Show("Hello, world?", "My App", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No);
Observa en la captura de pantalla como el botón "No" está ligeramente resaltado, para indicar visualmente que está seleccionado y será invocado si las teclas Enter o Espacio son presionadas.
El ejemplo completo
Como prometí, este es el ejemplo completo utilizado en este artículo:
<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);
}
}
}