This article is currently in the process of being translated into Japanese (~97% done).
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" ボタンが少し浮き上がっているように見えます。これはこのボタンが選択されていて、Enter や Space ボタンが押されたら、こちらが実行されることを視覚的に示しています。
完全なサンプル
約束したように、これが、この記事で使われた完全なサンプルです。
<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);
}
}
}