TOC

This article is currently in the process of being translated into Japanese (~97% done).

Dialogs:

The MessageBox

WPFはアプリケーションで使用できる各種のダイアログを提供しています。その最も単純なものは MessageBox です。その目的はユーザーにメッセージを表示するだけです。そしてユーザーにメッセージへの応答方法をいくつか提供します。

MessageBox は、あなたが必要な見映と動作をするための様々なパラメータを持った静的な Show() メソッドを呼び出して使います。この記事では、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 列挙型を使って制御します。このケースでは、Yes、No と Cancel ボタンがあります。以下の、自己説明的な列挙の値を指定できます。

  • OK
  • OKCancel
  • YesNoCancel
  • YesNo

複数の選択肢がある場合、ユーザーがどれを選択したのか知る必要があるでしょう。幸い、MessageBox.Show() メソッドはどれを選択したかを示す 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() の結果をチェックすることで、ユーザーの選択に反応して、スクリーンショットのようにできます。

アイコン付きのメッセージボックス

メッセージボックスは4番目のパラメータを使ってメッセージテキストの左側に組み込みアイコンを表示できます。

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

MessageBoxImage 列挙型を使って、状況ごとに違ったアイコンを選ぶことが出来ます。以下がその完全なリストです。

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

それぞれの名前はその外観を示すべきですが、あなた自身で試して確認するか、それぞれの値の説明とイラストのある次のMSDNの記事を参照してください。 http://msdn.microsoft.com/en-us/library/system.windows.messageboximage.aspx

デフォルトオプションを使ったメッセージボックス

ダイアログが表示されて、ユーザーがエンターキーを入力しただけの場合、メッセージボックスはデフォルトのボタンを選択します。例えば、"Yes" と "No" ボタンが有るメッセージボックスでは、デフォルトは "Yes" です。これを MessageBox.Show() メソッドの5番目のパラメータを使って変えることが出来ます。

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

スクリーンショットでは、"No" ボタンが少し浮き上がっているように見えます。これはこのボタンが選択されていて、EnterSpace ボタンが押されたら、こちらが実行されることを視覚的に示しています。

完全なサンプル

約束したように、これが、この記事で使われた完全なサンプルです。

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