DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

メッセージボックスを表示する

メッセージボックスを表示するには、MessageBoxクラス(System.Windows.Forms名前空間)のShowメソッドを使用します。メッセージボックスは、エラーメッセージを表示したり、ユーザーに確認を求める時などに便利です。

補足:VB.NETではメッセージボックスを表示させるためにMsgBox関数を使うこともできますが、ここではその使い方を説明しません。
VB.NET
コードを隠すコードを選択
'メッセージボックスを表示する
'Yes,Noボタンと!アイコン
MsgBox("ここに説明を書く。", _
    MsgBoxStyle.YesNo Or MsgBoxStyle.Exclamation, _
    "タイトル")

メッセージボックスはモーダルとして表示されますので、基本的には、メッセージボックスを閉じるまでアプリケーションに対して他の操作ができなくなります。

例えば、メッセージボックスを使ってユーザーに注意を促すには、次のようにします。

メッセージボックス

VB.NET
コードを隠すコードを選択
'Imports System.Windows.Forms

'メッセージボックスを表示する
MessageBox.Show("正しい値を入力してください。", _
                "エラー", _
                MessageBoxButtons.OK, _
                MessageBoxIcon.Error)
C#
コードを隠すコードを選択
//using System.Windows.Forms;

//メッセージボックスを表示する
MessageBox.Show("正しい値を入力してください。",
    "エラー",
    MessageBoxButtons.OK,
    MessageBoxIcon.Error);

例えば、メッセージボックスを使ってユーザーに質問をするには次のようにします。ここでは、「はい」「いいえ」「キャンセル」の3つの中から1つを選んでもらうようにしています。さらに、デフォルトのボタン(始めにフォーカスのあるボタン)を2番目のボタンである「いいえ」にしています。

メッセージボックス

VB.NET
コードを隠すコードを選択
'メッセージボックスを表示する 
Dim result As DialogResult = MessageBox.Show("ファイルを上書きしますか?", _
                                             "質問", _
                                             MessageBoxButtons.YesNoCancel, _
                                             MessageBoxIcon.Exclamation, _
                                             MessageBoxDefaultButton.Button2)

'何が選択されたか調べる 
If result = DialogResult.Yes Then
    '「はい」が選択された時 
    Console.WriteLine("「はい」が選択されました")
ElseIf result = DialogResult.No Then
    '「いいえ」が選択された時 
    Console.WriteLine("「いいえ」が選択されました")
ElseIf result = DialogResult.Cancel Then
    '「キャンセル」が選択された時 
    Console.WriteLine("「キャンセル」が選択されました")
End If
C#
コードを隠すコードを選択
//メッセージボックスを表示する
DialogResult result = MessageBox.Show("ファイルを上書きしますか?",
    "質問",
    MessageBoxButtons.YesNoCancel,
    MessageBoxIcon.Exclamation,
    MessageBoxDefaultButton.Button2);

//何が選択されたか調べる
if (result == DialogResult.Yes)
{
    //「はい」が選択された時
    Console.WriteLine("「はい」が選択されました");
}
else if (result == DialogResult.No)
{
    //「いいえ」が選択された時
    Console.WriteLine("「いいえ」が選択されました");
}
else if (result == DialogResult.Cancel)
{
    //「キャンセル」が選択された時
    Console.WriteLine("「キャンセル」が選択されました");
}

以下、メッセージボックスに表示できるボタンとアイコンの種類について補足します。

メッセージボックスのボタン

メッセージボックスに表示するボタンは、MessageBoxButtons列挙体で指定します。以下にMessageBoxButtons列挙体のメンバと、そのメンバを指定したときに表示されるボタンについて説明します。

MessageBoxButtons列挙体のメンバ名 説明 画像
OK 「OK」ボタンのみ。 OK
OKCancel 「OK」と「キャンセル」ボタン。 OKCancel
AbortRetryIgnore 「中止」、「再試行」、「無視」ボタン。メッセージボックスの閉じるボタンが無効。 AbortRetryIgnore
YesNoCancel 「はい」、「いいえ」、「キャンセル」ボタン。 YesNoCancel
YesNo 「はい」と「いいえ」ボタン。メッセージボックスの閉じるボタンが無効。 YesNo
RetryCancel 「再試行」と「キャンセル」ボタン。 RetryCancel

ユーザーがどのボタンを押したかは、Showメソッドが返すDialogResultの値で分かります。メッセージボックスの閉じるボタン(Xボタン)が押された時は、基本的にはキャンセルボタンが押されたことになりますが、「OK」ボタンのみのとき(MessageBoxButtons.OKのとき)は、OKボタンが押されたことになります。

MessageBoxDefaultButton列挙体を指定すれば、メッセージボックスを表示したときにフォーカスのあるボタンを変更することもできます。

これらの使用例はすでに紹介しましたので、ここでは省略します。

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

メッセージボックスにアイコンを表示することができます。表示できるアイコンは4種類あり、MessageBoxIcon列挙体で指定します。

以下に、MessageBoxIcon列挙体のメンバとその意味を紹介します。

MessageBoxIcon列挙体のメンバ名 説明 画像
None アイコンなし。メッセージボックスを表示するときに一般の警告音が鳴る。
Hand 赤丸に白いX(停止マーク)。メッセージボックスを表示するときにシステムエラーの音が鳴る。エラーメッセージを表示するときなどに使用する。 Hand
Question 丸い吹き出しに疑問符記号。メッセージボックスを表示するときに「メッセージ(問い合わせ)」の音が鳴る。現在はこのアイコンの使用が推奨されておらず、下位互換性を維持するためにのみサポートされている。 Question
Exclamation 黄色い三角に感嘆符記号。メッセージボックスを表示するときに「メッセージ(警告)」の音が鳴る。ユーザーに確認をするときなどに使用する。 Exclamation
Asterisk 丸い吹き出しに「i」。メッセージボックスを表示するときに「メッセージ(情報)」の音が鳴る。ユーザーに情報を表示するときなどに使用する。 Asterisk
Stop Handと同じ。
Error Handと同じ。
Warning Exclamationと同じ。
Information Asteriskと同じ。

その他のオプション

オーナーウィンドウを指定する

メッセージボックスのオーナーウィンドウを、Showメソッドの1番目のパラメータに指定することができます。もしこれを指定しなかったならば、アクティブなウィンドウをオーナーとするようです。

例えば、自分自身をオーナーとしてメッセージボックスを表示するならば、次のようにします。

VB.NET
コードを隠すコードを選択
'自分自身をオーナーとしてメッセージボックスを表示する 
MessageBox.Show(Me, "テストです。")
C#
コードを隠すコードを選択
//自分自身をオーナーとしてメッセージボックスを表示する
MessageBox.Show(this, "テストです。");

文字を右揃えにする

メッセージボックスのタイトルとメッセージを右揃えにすることもできます。それには、MessageBoxOptions列挙体のRightAlignを指定します。

メッセージボックス

VB.NET
コードを隠すコードを選択
'文字を右揃えにしてメッセージボックスを表示する
Dim result As DialogResult = MessageBox.Show("ファイルを上書きしますか?", _
                                             "質問", _
                                             MessageBoxButtons.YesNoCancel, _
                                             MessageBoxIcon.Exclamation, _
                                             MessageBoxDefaultButton.Button2, _
                                             MessageBoxOptions.RightAlign)
C#
コードを隠すコードを選択
//文字を右揃えにしてメッセージボックスを表示する
DialogResult result = MessageBox.Show("ファイルを上書きしますか?",
    "質問",
    MessageBoxButtons.YesNoCancel,
    MessageBoxIcon.Exclamation,
    MessageBoxDefaultButton.Button2,
    MessageBoxOptions.RightAlign);

サービスからメッセージボックスを表示する

MessageBoxOptions列挙体のServiceNotificationを指定してShowメソッドを呼び出すと、メッセージボックスが現在アクティブなデスクトップに表示されます。この時、メッセージボックスはvisualスタイルを使用しません。このオプションは通常、サービスからメッセージボックスを表示するときに使用します。

ServiceNotificationに似たオプションにDefaultDesktopOnlyがあります。ServiceNotificationではログインしているユーザーがいない場合でもメッセージボックスが表示されますが、DefaultDesktopOnlyでは既定のデスクトップ(ユーザーがログオンした後でアプリケーションが動作するデスクトップ)でのみ表示されます。

これらのオプションは、Windows NT系のOSでのみ有効です。

メッセージボックス

VB.NET
コードを隠すコードを選択
'文字を右揃えにしてメッセージボックスを表示する
Dim result As DialogResult = MessageBox.Show("ファイルを上書きしますか?", _
                                             "質問", _
                                             MessageBoxButtons.YesNoCancel, _
                                             MessageBoxIcon.Exclamation, _
                                             MessageBoxDefaultButton.Button2, _
                                             MessageBoxOptions.ServiceNotification)
C#
コードを隠すコードを選択
//文字を右揃えにしてメッセージボックスを表示する
DialogResult result = MessageBox.Show("ファイルを上書きしますか?",
    "質問",
    MessageBoxButtons.YesNoCancel,
    MessageBoxIcon.Exclamation,
    MessageBoxDefaultButton.Button2,
    MessageBoxOptions.ServiceNotification);
  • 履歴:
  • 2009/12/30 全面的な書き換え。「オーナーウィンドウを指定する」「サービスからメッセージボックスを表示する」を追加。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • コードの先頭に記述されている「Imports ??? がソースファイルの一番上に書かれているものとする」(C#では、「using ???; がソースファイルの一番上に書かれているものとする」)の意味が分からないという方は、こちらをご覧ください。