Home > C# > WPF > WPFコントロール > ダイアログボックス

WPFでメッセージ・ボックスを使用する

メッセージ・ボックスは、テキストを表示したウィンドウを表示し、ユーザーにメッセージを伝えることができます。表示されるウィンドウは、モーダルであるため、メッセージボックス・ウィンドウを閉じるまで、他のウィンドウは、操作できません。

メッセージ・ボックスは、WPF(System.Windows名前空間)とFormアプリケーション(System.Windows.Forms名前空間) で異なる名前空間のクラスを使用します。そのため、Formアプリケーション向けのメッセージボックスを使用する例は、そのままでは動作しないことがあります。

このページでは、 WPFアプリケーションで使用するメッセージボックスについて扱います。

メッセージボックスは、必要な内容のほとんどが作成されているため、表示するテキストを表示するだけで利用できます。

メッセージだけを持つメッセージ・ボックス

メッセージだけを伝えるメッセージボックスです。メッセージだけを指定すれば良いので簡単です。

コード例

MessageBox.Show("メッセージを伝えることができます。");
メッセージだけを持つメッセージ・ボックス

メッセージの途中で、改行したい場合は、制御文字(改行記号)\nを使用して下さい。

メッセージとタイトルキャプションを持つメッセージ・ボックス

キャプションを持つメッセージボックス。メッセージボックスにキャプションが付いているので、きちんとしたイメージが持たれます。配布するアプリケーションでは、メッセージだけのものより、キャプションを付けたものを使ったほうが良いと思われます。

コード例

MessageBox.Show("メッセージを伝えることができます。","メッセージ・ボックス");
メッセージとタイトルキャプションを持つメッセージ・ボックス

メッセージとタイトルキャプションとボタンを持つメッセージ・ボックス

どんなボタンを表示するか指定する

これまでのメッセージとキャプションに加え、ボタンの項目が追加されます。どのボタンを表示するか、MessageBoxButton列挙体で指定します。

MessageBoxButton列挙体(System.Windows名前空間)
識別子(メンバ) 表示するボタン
OK 0 OK ボタン
OKCancel 1 OK ボタンとキャンセル ボタン
YesNo 4 はいボタンといいえボタン
YesNoCancel 3 はいボタン、いいえボタン、キャンセル ボタン

※ WPFで利用するMessageBoxButton列挙体は、System.Windows名前空間に存在します。Formアプリケーションで使用するMessageBoxButtons列挙体(末尾のsの有無に注意)は、System.Windows.Forms名前空間 に存在し、更に内容も一部異なります。

どのボタンが押されたか確認する

押されたボタンの種類は、MessageBoxResult列挙体で、戻り値に格納されます。

  
MessageBoxResult列挙体(System.Window名前空間)
識別子(メンバ) 結果の値
Cancel 2 [キャンセル]
No 7 [いいえ]
None 0 結果を返しません。
OK 1 [OK]
Yes 1 [OK]

※Formアプリケーションでは、MessageBoxResult列挙体ではなく、DialogResult 列挙体を使用し名前空間(System.Windows.Forms名前空間) も異なります。

コード例

MessageBoxResult msbr = MessageBox.Show("メッセージを伝えることができます。", "メッセージ・ボックス", MessageBoxButton.OKCancel);

MessageBox.Show((MessageBoxResult)msbr + "が、押されたよ");
OKとCancelボタンを持つダイアログボックス OKが押されたとき キャンセルが押されたとき

メッセージとタイトルキャプションとボタンとアイコンを持つメッセージ・ボックス

これまでのメッセージとキャプション、ボタンに加え、アイコンが追加されます。どのアイコンを表示するか、MessageBoxImage列挙体で指定します。

どのアイコンを使用するかを指定する

  
MessageBoxImage列挙体(System.Windows名前空間)
識別子(メンバ) 表示されるアイコン
Asterisk 64 アスタリスク
Error 16 エラー
Exclamation 48 感嘆符
Hand 16 Hand
Information 64 情報
None 0 表示しません
Question 32 クエスチョン非推奨
Stop 16 停止
Warning 48 警告

※Formアプリケーションでは、MessageBoxIcon列挙体(System.Windows.Forms名前空間)を使用します。

コード例

MessageBoxResult msbr = MessageBox.Show("メッセージを伝えることができます。", "メッセージ・ボックス", MessageBoxButton.YesNoCancel, MessageBoxImage.Asterisk);

MessageBox.Show((MessageBoxResult)msbr + "が、押されたよ");
アイコンの付いたメッセージボックス

使用例

YesNoCancelメッセージボックス

3つのボタンとメッセージで構成されるYesNoCancelメッセージボックスの実装例です。メインウィンドウのボタンを押すと、YesNoCancelメッセージボックスが表示されます。 メッセージボタンのボタンを押すとメインウィンドウのラベルに押したことが表示されます。

[xaml]

<Window x:Class="BasicWindow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="150" Width="200">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="80*"/>
            <RowDefinition Height="40*"/>
        </Grid.RowDefinitions>
        
        <Button Name="btn0" Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Center" 
                Width="100" Height="50" Click="btn0_Click">
            押してね。
        </Button>
        <Label Name="Label01" content="メッセージ" Grid.Row="1" Background="Cornsilk" />

    </Grid>
</Window>
  メッセージボックスサンプル  YesNoCancelメッセージボックス

[xaml.cs]

using System.Windows;

namespace BasicWindow
{
    /// <summary>
    /// MainWindow.xaml の相互作用ロジック
    /// </summary>
    public partial class MainWindow : Window
    {

        public MainWindow()
        {
            InitializeComponent();
        }

        private void btn0_Click(object sender, RoutedEventArgs e)
        {
            // ボタンのイベントを処理する。処理は、直接記述せず、メソッドにまとめて呼び出します。
            btn0Process();
        }

        private void btn0Process()
        {
            // メッセージダイアログを呼び出すメソッド
            
            // Configure the message box to be displayed
            // 表示されるメッセージボックスを構成します
            string messageBoxText = "変更を保存しますか?";
            string caption = "Word Processor";
            MessageBoxButton button = MessageBoxButton.YesNoCancel;
            MessageBoxImage icon = MessageBoxImage.Warning;

            // Labelのメッセージを消去する
            Label01.Content = "";

            // Display message box メッセージボックスを表示します
            MessageBoxResult result = MessageBox.Show(messageBoxText, caption, button, icon);

            // メッセージダイアログボックスで押されたボタンの処理
            // Process message box results
            switch (result)
            {
                case MessageBoxResult.Yes:
                    // User pressed Yes button
                    Label01.Content = "「はい」が押されたよ。";
                    break;
                case MessageBoxResult.No:
                    // User pressed No button
                    Label01.Content = "「いいえ」が押されたよ。";
                    break;
                case MessageBoxResult.Cancel:
                    // User pressed Cancel button
                    Label01.Content = "「キャンセル」が押されたよ。";
                    break;
            }
        }
    }
}

動作確認環境

Microsoft Visual Studio Express 2013 for Desktop 64bit
Windows 8.1 pro 64bit

参考サイト

ダイアログ ボックスの概要 (msdn)(外部サイト)

メッセージボックスのサンプル (msdn)(外部サイト)

MessageBox クラス (msdn)(外部サイト)

MessageBoxResult 列挙体 (msdn)(外部サイト)

関連記事

メッセージ・ダイアログ・ボックスに、他のコントロールのプロパティを文字列として表示する[C# WPF]

Button01を押すとTextBoxのテキストが、Button02を押すと、Button02のCaptionがメッセージ・ダイアログ・ボックスに表示される

Button01を押すとTextBoxのテキストが、Button02を押すと、Button02のCaptionがメッセージ・ダイアログ・ボックスに表示される

このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」