Windowsフォームのメッセージボックスを表示する [C#]

.NETにはメッセージを表示するダイアログボックスを表示するためのクラスが用意されています。
メッセージボックスを使用すると、ユーザーにアプリケーションの例外や、システムのエラーを通知したり、有益な情報を提示したり、ユーザーが行った操作に対する警告を表示したり、「はい or いいえ」や「OK or キャンセル」などで応答する質問形式のメッセージを表示して、ユーザーと対話したりすることができます。

今回はC#のWindowsフォームアプリケーションで、メッセージボックスを表示する方法を紹介します。

本記事ではVisual Studioで作成した、Windowsフォームアプリケーションのプロジェクトに記述するコードを記載します。
Windowsフォームアプリケーションのプロジェクトを作成する方法については、以下の記事を参照してください。

Windowsフォームアプリケーションのプロジェクト(ソリューション)を作成する。[C#]
Visual StudioでC#のWindowsフォームアプリケーションのプロジェクト(ソリューション)を作成する方法を記載します。 ...

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

.NET FrameworkのWindowsフォームでメッセージボックスを表示するには、System.Windows.Forms名前空間にあるMessageBoxクラスを使用します。
MessageBoxクラスにはメッセージボックスを表示するShowメソッドが用意されています。

メッセージテキストのみを指定して表示

1番シンプルなメッセージボックスはShowメソッドのパラメーター(引数)にメッセージ(string: 文字列)のみを指定した形式になります。

ソースコード

実行結果

Windowsフォームのメッセージボックス メッセージテキストのみ指定

メッセージとタイトルを指定して表示

Showメソッドのパラメーターにメッセージ(string: 文字列)とタイトル(string: 文字列)を指定すると、タイトルバーにキャプション(見出し)が表示されます。

ソースコード

実行結果

Windowsフォームのメッセージボックス メッセージとキャプション(タイトル)を指定

表示するボタンを指定して表示

ボタンを表示する場合はShowメソッドのパラメーターに表示するボタンの種類を指定します。
Showメソッドのパラメーターに指定するボタンの種類には、System.Windows.Forms名前空間にあるMessageBoxButtons列挙型を指定します。

ソースコード

実行結果

Windowsフォームのメッセージボックス ボタンの種類を指定

MessageBoxButtons列挙型

MessageBoxButtons列挙型には、次のメンバー(フィールド)が用意されています。

フィールド 説明
OK 0 メッセージボックスに「OK」ボタンを表示します。
OKCancel 1 メッセージボックスに「OK」ボタンと「キャンセル」ボタンを表示します。
AbortRetryIgnore 2 メッセージボックスに「中止」、「再試行」、および「無視」の各ボタンを表示します。
YesNoCancel 3 メッセージボックスに「はい」、「いいえ」、および「キャンセル」の各ボタンを表示します。
YesNo 4 メッセージボックスに「はい」ボタンと「いいえ」ボタンを表示します。
RetryCancel 5 メッセージボックスに「再試行」ボタンと「キャンセル」ボタンを表示します。

表示するボタンとアイコンを指定して表示

アイコンを表示する場合はShowメソッドのパラメーターに表示するアイコンの種類を指定します。
Showメソッドのパラメーターに指定するアイコンの種類には、System.Windows.Forms名前空間にあるMessageBoxIcon列挙型を指定します。

ソースコード

実行結果

Windowsフォームのメッセージボックス アイコンを指定

MessageBoxIcon列挙型

MessageBoxIcon列挙型には、次のメンバー(フィールド)が用意されています。

フィールド 説明
None 0 なし
Error
Hand
Stop
16 背景色が赤の円で囲まれたバツ(×)のアイコンが表示されます。
Question 32 背景色が白または青の円で囲まれた小文字の疑問符(?)のアイコンが表示されます。
Warning
Exclamation
48 背景色が黄色の三角で囲まれた感嘆符(!)のアイコンが表示されます。
メッセージボックスには、背景が黄色い三角で囲んだ感嘆符から成るシンボルが含まれます。
Information
Asterisk
64 背景色が白または青の円で囲まれた小文字のiのアイコンが表示されます。

Microsoftのドキュメントのメッセージボックスアイコンのページには次の記載があります。

疑問符は、質問の特定の種類を明確に表さず、メッセージの言い回しはどのメッセージの種類にも適用されるため、疑問符のメッセージ アイコンは推奨されなくなりました。さらにユーザーは、疑問符シンボルをヘルプ情報シンボルと混同することがあります。したがって、メッセージボックスには疑問符シンボルを使用しないでください。システムは引き続き、下位互換性のためだけに、その組み込みをサポートします。

出典: MessageBoxIcon 列挙型

疑問符の「Question」は非推奨になっているようです。

以下にそれぞれのアイコンを指定した場合に表示されるアイコンを示します。

なし None

Windowsフォームのメッセージボックス アイコンなし

停止 エラー Error, Hand, Stop

Windowsフォームのメッセージボックス 停止、エラーアイコン Error, Hand, Stop

問い合わせ Question

Windowsフォームのメッセージボックス 問い合わせ、質問アイコン Question

警告 注意 Warning, Exclamation

Windowsフォームのメッセージボックス 警告、注意アイコン Warning, Exclamation

情報 Information, Asterisk

Windowsフォームのメッセージボックス 情報、アスタリスクアイコン Information, Asterisk

既定のボタンを指定して表示

既定のボタン(初期選択されるボタン)を設定する場合は、Showメソッドのパラメーターに既定のボタンの種類を指定します。
Showメソッドのパラメーターに指定する既定のボタンの種類には、System.Windows.Forms名前空間にあるMessageBoxDefaultButton列挙型を指定します。

ソースコード

実行結果

Windowsフォームのメッセージボックス 既定のボタンを指定
上記の例では2番目のボタン(「再試行」ボタン)を既定のボタンとして選択しています。

MessageBoxDefaultButton列挙型

MessageBoxDefaultButton列挙型には、次のメンバー(フィールド)が用意されています。

フィールド 説明
Button1 0 メッセージボックスの1番目のボタンが既定のボタンになります。
Button2 256 メッセージボックスの2番目のボタンが既定のボタンになります。
Button3 512 メッセージボックスの3番目のボタンが既定のボタンになります。

メッセージボックスの戻り値を取得

メッセージボックスのボタンに「OKCancel」や「YesNoCancel」などの複数のボタンを指定すると、ユーザーが選択した(クリックした)ボタンの形式を戻り値として取得して処理を分岐することができます。
Showメソッドは戻り値にSystem.Windows.Forms名前空間のDialogResult列挙型を返します。

ソースコード

実行結果

Windowsフォームのメッセージボックス 戻り値を取得

DialogResult列挙型

DialogResult列挙型には、次のメンバー(フィールド)が用意されています。

名前 説明
None 0 メッセージボックスの結果がなし(Nothing)であることを示します。
OK 1 メッセージボックスの結果が「OK」であることを示します。
Cancel 2 メッセージボックスの結果が「キャンセル」であることを示します。
Abort 3 メッセージボックスの結果が「中止」であることを示します。
Retry 4 メッセージボックスの結果が「再試行」であることを示します。
Ignore 5 メッセージボックスの結果が「無視」であることを示します。
Yes 6 メッセージボックスの結果が「はい」であることを示します。
No 7 メッセージボックスの結果が「いいえ」であることを示します。

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

MessageBoxクラスのShowメソッドでは、1番目のパラメーター(引数)にメッセージボックスを所有するオーナーウィンドウを指定することができます。
オーナーウィンドウにはSystem.Windows.Forms名前空間のIWin32Windowインターフェースの実装(Formクラスなど)を指定します。

ソースコード

上記の例では自分自身のthis(フォームオブジェクト)を指定しています。

オーナーウィンドウを指定すると、指定したオーナーウィンドウの前にメッセージボックスが表示されます。
オーナーウィンドウを指定しない場合は、アクティブなウィンドウがオーナーとなります。

オーナーウィンドウに指定されたウィンドウは、メッセージボックスが表示される際に前面に移動して表示されます。

上記の例では、起動フォーム(StartupForm)からForm1とForm2を表示し、ボタンクリックのイベントでそれぞれのフォームをオーナーウィンドウに指定して、メッセージボックスを表示しています。

実行結果

Windowsフォームのメッセージボックス オーナーウィンドウを指定して表示するサンプル

StartupFormのボタン(button1)をクリックしてメッセージボックスを表示します。

Windowsフォームのメッセージボックス オーナーウィンドウを指定して表示するサンプル
Form1をオーナーウィンドウに指定している場合は、Form1が最前面に表示されます。

Windowsフォームのメッセージボックス オーナーウィンドウを指定して表示するサンプル
Form2をオーナーウィンドウに指定している場合は、Form2が最前面に表示されます。

メッセージボックスのオプション

メッセージボックスを表示するShowメソッドのパラメーター(引数)には、メッセージボックスのオプションを指定することができます。
メッセージボックスのオプションには、System.Windows.Forms名前空間にあるMessageBoxOptions列挙型を指定します。

MessageBoxOptions列挙型

フィールド 説明
RightAlign 524288 メッセージボックスのテキストを右揃えで表示します。
RtlReading 1048576 メッセージボックスのテキストを右から左へ読むように指定します。
DefaultDesktopOnly 131072 メッセージボックスをアクティブデスクトップに表示します。この定数はServiceNotificationに似ていますが、メッセージボックスが対話型のウィンドウステーションの既定のデスクトップでしか表示されない点が異なります。メッセージボックスを表示したアプリケーションがフォーカスを失い、視覚スタイル(Visualスタイル)を使用せずにメッセージボックスが表示されます。
ServiceNotification 2097152 メッセージボックスをアクティブデスクトップに表示します。呼び出し元は、ユーザーにイベントを通知するサービスです。Showによって、コンピューターにログオンしているユーザーがいない場合でも、現在アクティブなデスクトップにメッセージボックスが表示されます。

メッセージを右揃えにする

メッセージボックスのオプションにMessageBoxOptions.RightAlignを指定すると、メッセージが右揃えになります。

ソースコード

実行結果

Windowsフォームのメッセージボックス メッセージを右揃えにする

キャプションとアイコンを右揃えにする

メッセージボックスのオプションにMessageBoxOptions.RtlReadingを指定すると、キャプション(タイトル)とアイコンが右揃えになります。

ソースコード

実行結果

Windowsフォームのメッセージボックス キャプションとアイコンを右揃えにする

アクティブデスクトップに表示する

メッセージボックスをアクティブデスクトップに表示する場合には、メッセージボックスのオプションにMessageBoxOptions.DefaultDesktopOnlyを指定します。

ソースコード

実行結果

Windowsフォームのメッセージボックス アクティブデスクトップに表示する

サービスから表示する

メッセージボックスをサービスから表示する場合には、メッセージボックスのオプションにMessageBoxOptions.ServiceNotificationを指定します。

ソースコード

実行結果

Windowsフォームのメッセージボックス サービスから表示する

Showメソッドの構文(オーバーロード)

Showメソッドの構文には21種類のオーバーロードが用意されています。

構文1

説明

指定したテキストを表示するメッセージボックスを表示します。

構文2

説明

指定したテキストとキャプションを表示するメッセージボックスを表示します。

構文3

説明

指定したテキスト、キャプション、およびボタンを表示するメッセージボックスを表示します。

構文4

説明

指定したテキスト、キャプション、ボタン、およびアイコンを表示するメッセージボックスを表示します。

構文5

説明

指定したテキスト、キャプション、ボタン、アイコン、および既定のボタンを表示するメッセージボックスを表示します。

構文6

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、およびオプションを表示するメッセージボックスを表示します。

構文7

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および「ヘルプ」ボタンを表示するメッセージボックスを表示します。

構文8

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および指定したヘルプファイルを使用する「ヘルプ」ボタンを表示するメッセージボックスを表示します。

構文9

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および指定したヘルプファイルとヘルプキーワードを使用する「ヘルプ」ボタンを表示するメッセージボックスを表示します。

構文10

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および指定したヘルプファイルとHelpNavigatorを使用する「ヘルプ」ボタンを表示するメッセージボックスを表示します。

構文11

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および指定したヘルプファイル、HelpNavigator、およびヘルプ トピックを使用する「ヘルプ」ボタンを表示するメッセージボックスを表示します。

構文12

説明

指定したオブジェクトの前に、指定したテキストを表示するメッセージボックスを表示します。

構文13

説明

指定したオブジェクトの前に、指定したテキストとキャプションを表示するメッセージボックスを表示します。

構文14

説明

指定したオブジェクトの前に、指定したテキスト、キャプション、およびボタンを表示するメッセージボックスを表示します。

構文15

説明

指定したオブジェクトの前に、指定したテキスト、キャプション、ボタン、およびアイコンを表示するメッセージボックスを表示します。

構文16

説明

指定したオブジェクトの前に、指定したテキスト、キャプション、ボタン、アイコン、および既定のボタンを表示するメッセージボックスを表示します。

構文17

説明

指定したオブジェクトの前に、指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、およびオプションを表示するメッセージボックスを表示します。

構文18

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および指定したヘルプファイルを使用する「ヘルプ」ボタンを表示するメッセージボックスを表示します。

構文19

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および指定したヘルプファイルとヘルプキーワードを使用する「ヘルプ」ボタンを表示するメッセージボックスを表示します。

構文20

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および指定したヘルプファイルとHelpNavigatorを使用する「ヘルプ」ボタンを表示するメッセージボックスを表示します。

構文21

説明

指定したテキスト、キャプション、ボタン、アイコン、既定のボタン、オプション、および指定したヘルプファイル、HelpNavigator、およびヘルプトピックを使用する「ヘルプ」ボタンを表示するメッセージボックスを表示します。