TOC

This article has been localized into Italian by the community.

Dialogs:

Il MessageBox

Il WPF offre diverse opzioni di utilizzo dei dialog, ma la più semplice in assoluto è il MessageBox. Il suo unico scopo è quello di mostrare un messaggio all'utente per poi offrirgli uno o più modi per rispondere al messaggio.

Il MessageBox è usato richiamando il metodo statico Show() che può ricevere un range di vari parametri, in modo da mostrarsi e comportarsi nel modo desiderato. Andremo a considerare tutti i vari form in questo articolo, con ogni variazione del metodo MessageBox.Show() e con uno screenshot del risultato. Alla fine dell'articolo potrai trovare un esempio completo che ti permetterà di testare tutte le variazioni.

Nella sua forma più semplice, il MessageBox prende un singolo parametro, che è il messaggio da mostrare a schermo.

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

MessageBox con titolo

L'esempio precedente potrebbe risultare un po' troppo spoglio - potrebbe essere di aiuto un titolo mostrato sulla finestra. Fortunatamente, il secondo parametro opzionale ci permette di specificare il titolo:

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

MessageBox con bottoni aggiunti

Di default, il MessageBox ha solo il bottone OK, ma si può cambiare, nel caso tu voglia domandare qualcosa all'utente e non solo mostrargli una parte di informazione. Nota anche come uso linee multiple in questo messaggio, usando il carattere a capo (\n):

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

Puoi controllare quali bottoni mostrare usando un valore dall'enumerazione MessageBoxButton - in questo caso, un bottone Si, No e Cancella è incluso. I valori seguenti, che dovrebbero essere auto-esplicativi, sono disponibili:

  • OK
  • OKCancel
  • YesNoCancel
  • YesNo

Ora con le scelte multiple, hai bisogno di un modo per essere in grado di vedere qual è stata la scelta dell'utente, e fortunatamente, il metodo MessageBox.Show() restituisce sempre un valore dall'enumerazione MessageBoxResult che puoi usare. Qui un esempio:

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

Verificando il valore del metodo Message.Show(), puoi ora reagire alla scelta dell'utente, come visto nel codice esempio e negli screenshots.

MessageBox con icona

Il MessageBox ha la capacità di mostrare un'icona predefinita a sinistra del messaggio di testo, utilizzando un quarto parametro:

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

Usando l'enumerazione MessageBoxImage, puoi scegliere tra un range di icone per diverse situazioni. Qui c'è la lista completa:

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

I nomi dovrebbero dire molto sul loro aspetto, ma sentiti libero di sperimentare con i vari valori o dai un'occhiata a questo articolo MSDN, dove ogni valore è spiegato e anche illustrato: http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx

MessageBox con opzione di default

Il MessageBox selezionerà un bottone come scelta predefinita, che sarà poi il bottone invocato nel caso l'utente prema Enter una volta mostrato il dialog. Ad esempio, se mostri un MessageBox con un bottone "Si" e un "No", "Si" sarà la scelta predefinita. Puoi comunque cambiare questo comportamento usando un quinto parametro al metodo MessageBox.Show():

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

Da notare come nello screenshot il bottone "No" è leggermente elevato, per indicare visivamente che è selezionato e sarà invocato se il bottone Enter o Spazio viene premuto.

L'esempio completo

Come promesso, qui c'è l'esempio completo usato in questo articolo:

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