【C#】MessageBoxの使い方を完全解説|表示・ボタン・アイコン・戻り値まで初心者向けに解説
はじめに
C#でWindowsアプリを作っていると、「処理が完了しました」「入力内容を確認してください」「本当に削除しますか?」のようなメッセージを画面に表示したい場面がよくあります。そこで使う代表的な機能がMessageBoxです。
MessageBoxを使うと、短いコードでメッセージ、タイトル、ボタン、アイコンを表示できます。また、ユーザーが押したボタンを戻り値として取得し、その結果によって処理を分岐することもできます。
この記事では、C#のMessageBoxについて、基本の表示方法から、ボタン、アイコン、戻り値、WinFormsとWPFの違い、よくあるエラーまで初心者向けに解説します。
1. C#のMessageBoxとは?まず押さえたい基本
1-1. MessageBoxでできること
MessageBoxとは、ユーザーにメッセージを表示するためのダイアログです。C#のWindowsフォームアプリでは、System.Windows.Forms.MessageBoxクラスを使って表示します。Microsoft公式ドキュメントでも、MessageBoxは指定したテキスト、タイトル、ボタン、アイコンなどを含むメッセージボックスを表示するクラスとして説明されています。
たとえば、次のようなことができます。
C#MessageBox.Show("処理が完了しました。");
この1行だけで、画面にメッセージダイアログを表示できます。
MessageBoxで主にできることは、次のとおりです。
メッセージを表示する
ダイアログのタイトルを設定する
OK、キャンセル、はい、いいえなどのボタンを表示する
情報、警告、エラーなどのアイコンを表示する
押されたボタンを取得して処理を分岐する
1-2. MessageBoxが使われる主な場面
MessageBoxは、ユーザーに何かを知らせたり、確認したりするときに使います。
よく使われる場面は次のようなケースです。
C#MessageBox.Show("保存しました。");
保存完了を知らせるだけなら、このような簡単なメッセージで十分です。
削除前の確認では、次のように「はい」「いいえ」を表示して、ユーザーに判断してもらうことができます。
C#DialogResult result = MessageBox.Show(
"データを削除してもよろしいですか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
このようにMessageBoxは、業務アプリ、管理画面、入力フォーム、ツール系アプリなど、さまざまなWindowsアプリで使われます。
1-3. Windowsフォームアプリで使うMessageBox
Windowsフォームアプリ、つまりWinFormsでは、System.Windows.Forms.MessageBoxを使います。
基本的な書き方は次のとおりです。
C#using System.Windows.Forms;
MessageBox.Show("こんにちは");
WinFormsでは、戻り値としてDialogResultを受け取ります。
C#DialogResult result = MessageBox.Show("終了しますか?", "確認", MessageBoxButtons.YesNo);
if (result == DialogResult.Yes)
{
Application.Exit();
}
WinFormsでMessageBoxを使う場合は、MessageBoxButtons、MessageBoxIcon、DialogResultをセットで覚えると理解しやすくなります。
1-4. WPFで使うMessageBoxとの違い
WPFでもMessageBoxは使えますが、WinFormsとは名前空間や戻り値の型が異なります。WPFはWindowsデスクトップアプリを作るためのUIフレームワークで、XAMLやデータバインディングなどを使える点が特徴です。
WPFでは、基本的に次のように書きます。
C#using System.Windows;
MessageBox.Show("こんにちは");
WinFormsでは戻り値にDialogResultを使いますが、WPFではMessageBoxResultを使います。
C#MessageBoxResult result = MessageBox.Show(
"終了しますか?",
"確認",
MessageBoxButton.YesNo,
MessageBoxImage.Question
);
if (result == MessageBoxResult.Yes)
{
Close();
}
WinFormsとWPFの主な違いは次のとおりです。
| 項目 | WinForms | WPF |
|---|---|---|
| 名前空間 | System.Windows.Forms | System.Windows |
| ボタン指定 | MessageBoxButtons | MessageBoxButton |
| アイコン指定 | MessageBoxIcon | MessageBoxImage |
| 戻り値 | DialogResult | MessageBoxResult |
この記事では主にWinFormsのMessageBoxを中心に解説し、必要に応じてWPFの書き方も紹介します。
1-5. MessageBoxを使う前に必要な名前空間
WinFormsでMessageBoxを使う場合は、ファイルの先頭に次の名前空間を追加します。
C#using System.Windows.Forms;
WPFの場合は、次の名前空間です。
C#using System.Windows;
名前空間を追加しない場合でも、完全修飾名で書くことはできます。
C#System.Windows.Forms.MessageBox.Show("メッセージ");
ただし、毎回このように書くと長くなるため、通常はusingを追加して使います。
2. MessageBoxの基本的な表示方法
2-1. 最小コードでメッセージを表示する
最もシンプルなMessageBoxの表示方法は、MessageBox.Showに文字列を1つ渡す書き方です。
C#MessageBox.Show("こんにちは");
このコードを実行すると、「こんにちは」というメッセージとOKボタンが表示されます。
ボタンクリックイベントの中で使う場合は、次のようになります。
C#private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("ボタンがクリックされました。");
}
初心者は、まずこの書き方を覚えれば問題ありません。
2-2. タイトル付きのMessageBoxを表示する
MessageBoxには、メッセージだけでなくタイトルも指定できます。
C#MessageBox.Show("処理が完了しました。", "完了");
第1引数が本文メッセージ、第2引数がタイトルです。
C#MessageBox.Show("ログインに成功しました。", "ログイン");
タイトルを付けると、何に関するメッセージなのかがユーザーに伝わりやすくなります。
2-3. 複数行のメッセージを表示する
複数行のメッセージを表示したい場合は、改行コードを使います。
C#MessageBox.Show("入力内容に誤りがあります。\n名前を入力してください。");
Windows環境では、\r\nを使うこともあります。
C#MessageBox.Show("入力内容に誤りがあります。\r\n名前を入力してください。");
可読性を高めたい場合は、Environment.NewLineを使う方法もあります。
C#MessageBox.Show(
"入力内容に誤りがあります。" + Environment.NewLine +
"名前を入力してください。"
);
長いメッセージを表示する場合は、1行に詰め込みすぎず、適度に改行すると読みやすくなります。
2-4. 変数の値をMessageBoxに表示する
変数の値をMessageBoxに表示することもできます。
C#string userName = "田中";
MessageBox.Show(userName);
説明文と組み合わせる場合は、文字列補間を使うと便利です。
C#string userName = "田中";
MessageBox.Show($"ユーザー名は {userName} です。");
数値も同じように表示できます。
C#int count = 10;
MessageBox.Show($"件数は {count} 件です。");
デバッグ中に変数の値を簡単に確認したい場合にも、MessageBox.Showはよく使われます。
2-5. 日本語メッセージを表示するときの注意点
C#のソースコードで日本語を使う場合、通常はそのまま日本語文字列を書けます。
C#MessageBox.Show("保存が完了しました。");
ただし、古い環境や文字コード設定によっては文字化けすることがあります。現在のVisual Studioでは通常問題になりにくいですが、ソースファイルの文字コードが不適切な場合は、UTF-8で保存されているか確認しましょう。
また、日本語メッセージでは、ユーザーに伝わる表現を意識することも大切です。
悪い例です。
C#MessageBox.Show("エラー");
良い例です。
C#MessageBox.Show("保存に失敗しました。入力内容を確認してください。", "エラー");
単に「エラー」と表示するよりも、何が起きたのか、次に何をすればよいのかを伝えるほうが親切です。
3. MessageBox.Showメソッドの使い方
3-1. MessageBox.Showの基本構文
MessageBox.Showには複数のオーバーロードがあります。Microsoft公式ドキュメントでも、メッセージだけを指定するもの、タイトル、ボタン、アイコン、既定ボタン、オプションなどを指定するものが用意されています。
よく使う基本構文は次のとおりです。
C#MessageBox.Show(text);
C#MessageBox.Show(text, caption);
C#MessageBox.Show(text, caption, buttons);
C#MessageBox.Show(text, caption, buttons, icon);
それぞれの意味は次のとおりです。
| 引数 | 意味 |
|---|---|
text | 表示するメッセージ本文 |
caption | タイトルバーに表示する文字列 |
buttons | 表示するボタンの種類 |
icon | 表示するアイコンの種類 |
3-2. メッセージだけを指定する書き方
メッセージだけを指定する場合は、次のように書きます。
C#MessageBox.Show("処理が完了しました。");
この場合、タイトルはアプリケーション名などになり、ボタンはOKのみ表示されます。
単純なお知らせであれば、この書き方で十分です。
3-3. タイトルを指定する書き方
タイトルを指定する場合は、第2引数にタイトル文字列を渡します。
C#MessageBox.Show("処理が完了しました。", "完了");
入力エラーの場合は、次のようにタイトルを「入力エラー」にすると分かりやすくなります。
C#MessageBox.Show("名前を入力してください。", "入力エラー");
タイトルは短く、内容がすぐ分かる言葉にしましょう。
3-4. ボタンを指定する書き方
ボタンを指定する場合は、第3引数にMessageBoxButtonsを指定します。
C#MessageBox.Show(
"削除してもよろしいですか?",
"確認",
MessageBoxButtons.YesNo
);
よく使うボタン指定には、次のようなものがあります。
C#MessageBoxButtons.OK
MessageBoxButtons.OKCancel
MessageBoxButtons.YesNo
MessageBoxButtons.YesNoCancel
MessageBoxButtons.RetryCancel
削除確認や終了確認では、YesNoやOKCancelを使うことが多いです。
3-5. アイコンを指定する書き方
アイコンを指定する場合は、第4引数にMessageBoxIconを指定します。
C#MessageBox.Show(
"保存が完了しました。",
"完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
エラーを表示する場合は、次のようにします。
C#MessageBox.Show(
"保存に失敗しました。",
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
アイコンを付けることで、メッセージの重要度や意味が視覚的に伝わりやすくなります。
3-6. よく使う引数の組み合わせ一覧
MessageBox.Showでよく使う組み合わせをまとめると、次のようになります。
| 用途 | コード例 |
|---|---|
| メッセージのみ | MessageBox.Show("完了しました。"); |
| タイトル付き | MessageBox.Show("完了しました。", "完了"); |
| 確認ボタン付き | MessageBox.Show("削除しますか?", "確認", MessageBoxButtons.YesNo); |
| 情報アイコン付き | MessageBox.Show("保存しました。", "完了", MessageBoxButtons.OK, MessageBoxIcon.Information); |
| 警告アイコン付き | MessageBox.Show("未入力項目があります。", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); |
| エラーアイコン付き | MessageBox.Show("処理に失敗しました。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error); |
初心者は、まず次の形を覚えると実務でも使いやすいです。
C#MessageBox.Show("表示するメッセージ", "タイトル", MessageBoxButtons.OK, MessageBoxIcon.Information);
4. MessageBoxに表示できるボタンの種類
4-1. OKボタンを表示する
OKボタンのみを表示する場合は、MessageBoxButtons.OKを指定します。
C#MessageBox.Show(
"保存が完了しました。",
"完了",
MessageBoxButtons.OK
);
ただし、ボタンを省略した場合も基本的にはOKボタンのみになります。
C#MessageBox.Show("保存が完了しました。");
単なる通知や完了メッセージでは、OKボタンのみで十分です。
4-2. OK/キャンセルボタンを表示する
OKとキャンセルを表示するには、MessageBoxButtons.OKCancelを使います。
C#DialogResult result = MessageBox.Show(
"処理を実行しますか?",
"確認",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question
);
if (result == DialogResult.OK)
{
// OKが押されたときの処理
}
else
{
// キャンセルが押されたときの処理
}
「実行するかどうか」を確認したい場合に使いやすいボタンです。
4-3. はい/いいえボタンを表示する
はい/いいえを表示するには、MessageBoxButtons.YesNoを使います。
C#DialogResult result = MessageBox.Show(
"データを削除しますか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (result == DialogResult.Yes)
{
// 削除処理
}
削除、終了、上書きなど、明確に「する/しない」を選ばせたい場合に向いています。
4-4. はい/いいえ/キャンセルボタンを表示する
はい/いいえ/キャンセルを表示するには、MessageBoxButtons.YesNoCancelを使います。
C#DialogResult result = MessageBox.Show(
"変更内容を保存しますか?",
"確認",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question
);
if (result == DialogResult.Yes)
{
// 保存して閉じる
}
else if (result == DialogResult.No)
{
// 保存せずに閉じる
}
else if (result == DialogResult.Cancel)
{
// 処理を中止する
}
「保存する」「保存しない」「操作をやめる」のように、3つの選択肢が必要な場面で使います。
4-5. 再試行/キャンセルなどその他のボタン
MessageBoxButtonsには、ほかにもいくつかの種類があります。代表的な値は、OK、OKCancel、AbortRetryIgnore、YesNoCancel、YesNo、RetryCancel、CancelTryContinueです。
再試行とキャンセルを表示する例です。
C#DialogResult result = MessageBox.Show(
"接続に失敗しました。再試行しますか?",
"接続エラー",
MessageBoxButtons.RetryCancel,
MessageBoxIcon.Warning
);
if (result == DialogResult.Retry)
{
// 再試行処理
}
AbortRetryIgnoreは古いWindowsアプリで見かけることがありますが、現在の業務アプリではユーザーに意味が伝わりにくい場合があります。必要がなければ、OKCancelやYesNoなど分かりやすいボタンを選びましょう。
4-6. 用途別に選ぶべきボタンの考え方
ボタンは、ユーザーに何を判断してほしいかで選びます。
| 用途 | おすすめのボタン |
|---|---|
| 完了通知 | OK |
| 入力エラー通知 | OK |
| 削除確認 | YesNo |
| 処理実行確認 | OKCancel |
| 保存確認 | YesNoCancel |
| 再試行確認 | RetryCancel |
たとえば、削除確認にOKCancelを使うと、「OK」が削除を意味するのか分かりにくいことがあります。
C#MessageBox.Show(
"このデータを削除しますか?",
"削除確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
このように「はい/いいえ」を使うと、ユーザーの判断が明確になります。
5. MessageBoxに表示できるアイコンの種類
5-1. 情報アイコンを表示する
情報を伝える場合は、MessageBoxIcon.Informationを使います。
C#MessageBox.Show(
"保存が完了しました。",
"完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
保存完了、登録完了、処理完了など、正常に処理が終わったことを伝える場面に適しています。
5-2. 警告アイコンを表示する
注意を促したい場合は、MessageBoxIcon.Warningを使います。
C#MessageBox.Show(
"必須項目が入力されていません。",
"警告",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
削除前の確認にも、警告アイコンを使うことがあります。
C#MessageBox.Show(
"削除すると元に戻せません。続行しますか?",
"警告",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
ユーザーに注意してほしい内容では、警告アイコンが効果的です。
5-3. エラーアイコンを表示する
処理失敗や例外発生を知らせる場合は、MessageBoxIcon.Errorを使います。
C#MessageBox.Show(
"ファイルの読み込みに失敗しました。",
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
エラーアイコンは強い印象を与えるため、本当に処理が失敗した場合やユーザー対応が必要な場合に使うとよいでしょう。
5-4. 質問アイコンを表示する
ユーザーに確認したい場合は、MessageBoxIcon.Questionを使います。
C#DialogResult result = MessageBox.Show(
"アプリケーションを終了しますか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
ただし、質問アイコンは近年のUIでは必ずしも多用されません。削除確認のように注意を促す必要がある場合は、Warningを使うほうが分かりやすいケースもあります。
5-5. アイコンなしで表示する
アイコンを表示しない場合は、アイコン引数を省略するか、MessageBoxIcon.Noneを指定します。
C#MessageBox.Show(
"処理を開始します。",
"確認",
MessageBoxButtons.OK,
MessageBoxIcon.None
);
特に強調する必要がない案内メッセージでは、アイコンなしでも問題ありません。
5-6. アイコンを使い分ける実践例
アイコンは、メッセージの種類に合わせて使い分けます。
| 用途 | アイコン |
|---|---|
| 完了・通知 | Information |
| 注意・確認 | Warning |
| エラー・失敗 | Error |
| 質問・選択 | Question |
| 通常メッセージ | None |
実践例です。
C#// 完了
MessageBox.Show(
"登録が完了しました。",
"完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
// 警告
MessageBox.Show(
"入力内容を確認してください。",
"入力エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
// エラー
MessageBox.Show(
"予期しないエラーが発生しました。",
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
アイコンを適切に使うと、ユーザーはメッセージの重要度をすばやく判断できます。
6. MessageBoxの戻り値を取得して処理を分岐する
6-1. MessageBoxの戻り値とは
MessageBox.Showは、ユーザーが押したボタンに応じた戻り値を返します。WinFormsでは戻り値の型はDialogResultです。
C#DialogResult result = MessageBox.Show("終了しますか?", "確認", MessageBoxButtons.YesNo);
このresultに、DialogResult.YesやDialogResult.Noなどの値が入ります。
戻り値を使うことで、「はい」が押されたら削除する、「いいえ」が押されたら何もしない、という処理を書けます。
6-2. DialogResultの基本
DialogResultには、ユーザーが押したボタンに対応する値が入ります。
代表的な値は次のとおりです。
| 戻り値 | 意味 |
|---|---|
DialogResult.OK | OKが押された |
DialogResult.Cancel | キャンセルが押された |
DialogResult.Yes | はいが押された |
DialogResult.No | いいえが押された |
DialogResult.Retry | 再試行が押された |
DialogResult.Abort | 中止が押された |
DialogResult.Ignore | 無視が押された |
基本的には、OK、Cancel、Yes、Noをよく使います。
6-3. OKが押されたか判定する
OKボタンが押されたかどうかを判定する例です。
C#DialogResult result = MessageBox.Show(
"処理を実行しますか?",
"確認",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question
);
if (result == DialogResult.OK)
{
MessageBox.Show("処理を実行しました。");
}
OKCancelを使った場合、OKが押されたときだけ処理を実行するようにできます。
6-4. キャンセルが押されたか判定する
キャンセルが押された場合に処理を中止する例です。
C#DialogResult result = MessageBox.Show(
"処理を続行しますか?",
"確認",
MessageBoxButtons.OKCancel,
MessageBoxIcon.Question
);
if (result == DialogResult.Cancel)
{
MessageBox.Show("処理をキャンセルしました。");
return;
}
// 続行する処理
MessageBox.Show("処理を続行します。");
キャンセル時はreturnでメソッドを抜ける書き方がよく使われます。
6-5. はい/いいえで処理を分岐する
はい/いいえで処理を分ける例です。
C#DialogResult result = MessageBox.Show(
"データを削除しますか?",
"削除確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (result == DialogResult.Yes)
{
MessageBox.Show("削除しました。");
}
else
{
MessageBox.Show("削除を中止しました。");
}
削除処理では、間違って実行されないように、必ず確認ダイアログを表示するのが一般的です。
6-6. 戻り値を使った確認ダイアログの実装例
実際の削除処理を想定したサンプルです。
C#private void deleteButton_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show(
"選択中のデータを削除します。よろしいですか?",
"削除確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (result != DialogResult.Yes)
{
return;
}
// ここに削除処理を書く
DeleteData();
MessageBox.Show(
"データを削除しました。",
"削除完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
}
ポイントは、Yes以外なら処理を中断することです。
C#if (result != DialogResult.Yes)
{
return;
}
この書き方にすると、削除処理の実行条件が明確になります。
7. よく使うMessageBoxの実装パターン
7-1. 入力チェックエラーを表示する
入力フォームで未入力をチェックする例です。
C#private void saveButton_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(nameTextBox.Text))
{
MessageBox.Show(
"名前を入力してください。",
"入力エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
return;
}
// 保存処理
}
入力エラーでは、何が不足しているのかを具体的に伝えることが大切です。
悪い例です。
C#MessageBox.Show("入力エラー");
良い例です。
C#MessageBox.Show("名前を入力してください。", "入力エラー");
7-2. 保存完了メッセージを表示する
保存処理が正常に完了したときの例です。
C#private void saveButton_Click(object sender, EventArgs e)
{
// 保存処理
SaveData();
MessageBox.Show(
"保存が完了しました。",
"保存完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
}
完了メッセージには、Informationアイコンが適しています。
7-3. 削除前の確認メッセージを表示する
削除前に確認する例です。
C#private void deleteButton_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show(
"このデータを削除してもよろしいですか?",
"削除確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (result == DialogResult.No)
{
return;
}
DeleteData();
MessageBox.Show(
"削除しました。",
"削除完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
}
削除は取り消しが難しい場合があるため、確認メッセージを出すと安全です。
7-4. 例外発生時にエラーメッセージを表示する
例外が発生したときにMessageBoxで知らせる例です。
C#try
{
LoadFile();
}
catch (Exception ex)
{
MessageBox.Show(
"ファイルの読み込み中にエラーが発生しました。",
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
開発中はex.Messageを表示すると原因を確認しやすいです。
C#catch (Exception ex)
{
MessageBox.Show(
ex.Message,
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
ただし、業務アプリでは内部エラーの詳細をそのまま表示すると、ユーザーに分かりにくかったり、セキュリティ上望ましくなかったりすることがあります。本番環境では、ユーザー向けの分かりやすい文言に変えることを検討しましょう。
7-5. 処理を続行するか確認する
時間がかかる処理や取り消しが難しい処理の前には、確認メッセージを表示すると親切です。
C#DialogResult result = MessageBox.Show(
"処理には時間がかかる場合があります。続行しますか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (result != DialogResult.Yes)
{
return;
}
// 時間のかかる処理
RunLongProcess();
このようにすると、ユーザーが誤って重い処理を実行することを防げます。
7-6. デバッグ時に値を確認する
開発中に変数の値を確認したい場合にもMessageBox.Showは使えます。
C#int total = 1500;
MessageBox.Show($"合計金額: {total}");
ただし、本格的なデバッグにはVisual Studioのブレークポイントやウォッチウィンドウを使うほうが便利です。MessageBoxは手軽ですが、何度も表示されると操作の邪魔になるため、確認が終わったら削除しましょう。
8. MessageBoxの表示位置・前面表示・親フォーム指定
8-1. MessageBoxの表示位置の基本
MessageBoxは、通常、アクティブなウィンドウの中央付近に表示されます。ただし、アプリの状態や親フォームの指定によって、表示位置や前面表示の挙動が変わることがあります。
基本の表示は次のとおりです。
C#MessageBox.Show("メッセージ");
この書き方でも多くの場合は問題ありませんが、複数フォームを使うアプリでは、どのフォームに対するメッセージなのかを明確にしたほうが安全です。
8-2. 親フォームを指定して表示する
WinFormsでは、MessageBox.Showの第1引数に親フォームを指定できます。公式ドキュメントにも、指定したオブジェクトの前にメッセージボックスを表示するオーバーロードが用意されています。
フォーム内で表示する場合は、次のようにthisを指定します。
C#MessageBox.Show(
this,
"保存が完了しました。",
"完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
このように親フォームを指定すると、そのフォームに紐づくメッセージとして表示されます。
8-3. 他のウィンドウの裏に隠れる原因
MessageBoxが他のウィンドウの裏に隠れてしまう原因として、親フォームを指定していないことがあります。
たとえば、複数フォームを開いている状態で次のように書くと、意図したフォームの前に表示されないことがあります。
C#MessageBox.Show("処理が完了しました。");
フォーム内から表示する場合は、できるだけ親フォームを指定しましょう。
C#MessageBox.Show(this, "処理が完了しました。", "完了");
これだけで、前面表示の問題が解消されることがあります。
8-4. 最前面に表示したい場合の考え方
どうしても最前面に表示したい場合でも、まずは親フォームを指定するのが基本です。
C#MessageBox.Show(
this,
"重要なメッセージです。",
"確認",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
MessageBoxOptionsを使って表示オプションを指定する方法もありますが、通常のアプリでは多用しないほうがよいでしょう。強制的に最前面へ出しすぎると、ユーザーの操作を妨げる可能性があります。
重要なのは、「どの画面に対するメッセージなのか」を明確にすることです。
8-5. 複数フォームでMessageBoxを使うときの注意点
複数フォームを使うアプリでは、どのフォームからMessageBoxを表示しているのかを意識しましょう。
メインフォームから表示する例です。
C#MessageBox.Show(this, "メイン画面の処理が完了しました。");
子フォームから表示する例です。
C#MessageBox.Show(this, "子画面の入力内容を確認してください。");
親フォームを指定しないと、ユーザーがどの画面のメッセージなのか分かりにくくなる場合があります。特に業務アプリでは、複数の入力画面を同時に開くこともあるため、親フォーム指定を意識するとよいでしょう。
9. MessageBoxでよくあるエラーと解決方法
9-1. MessageBoxが使えない原因
MessageBoxが使えない場合、よくある原因は次のとおりです。
必要な名前空間を追加していない
プロジェクトがWindowsフォームに対応していない
WPFとWinFormsの
MessageBoxを混同しているコンソールアプリで参照設定が不足している
MessageBoxButtonsやMessageBoxIconの名前を間違えている
たとえば、次のようなエラーが出ることがあります。
The name 'MessageBox' does not exist in the current context
この場合は、名前空間や参照設定を確認しましょう。
9-2. 名前空間が見つからない場合の対処法
WinFormsでMessageBoxを使う場合は、次を追加します。
C#using System.Windows.Forms;
それでもエラーになる場合は、プロジェクトがWindowsフォームに対応しているか確認してください。
SDK形式のプロジェクトでWinFormsを使う場合、.csprojに次のような設定が必要になることがあります。
XML<PropertyGroup>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
WPFの場合は、次の名前空間を使います。
C#using System.Windows;
WinFormsとWPFでは同じMessageBoxという名前でも、所属する名前空間が異なる点に注意しましょう。
9-3. ConsoleアプリでMessageBoxを使う方法
コンソールアプリでも、Windows環境で適切に参照を追加すればMessageBoxを使えます。
例です。
C#using System;
using System.Windows.Forms;
class Program
{
static void Main()
{
MessageBox.Show("コンソールアプリから表示しました。");
}
}
SDK形式のプロジェクトでは、.csprojにWindows向けターゲットとWinForms利用設定を追加します。
XML<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
ただし、コンソールアプリでは通常、Console.WriteLineで表示するほうが自然です。
C#Console.WriteLine("処理が完了しました。");
ユーザーにGUIで通知したい場合のみ、MessageBoxの利用を検討しましょう。
9-4. WPFでDialogResultが使えない場合の注意点
WPFでは、WinFormsのDialogResultではなくMessageBoxResultを使います。
間違った例です。
C#DialogResult result = MessageBox.Show("終了しますか?");
WPFでの正しい例です。
C#MessageBoxResult result = MessageBox.Show(
"終了しますか?",
"確認",
MessageBoxButton.YesNo,
MessageBoxImage.Question
);
if (result == MessageBoxResult.Yes)
{
Close();
}
WPFでは、ボタン指定もMessageBoxButtonsではなくMessageBoxButtonです。
C#MessageBoxButton.YesNo
アイコン指定もMessageBoxIconではなくMessageBoxImageです。
C#MessageBoxImage.Question
9-5. ボタンやアイコンの指定でエラーになる原因
ボタンやアイコンの指定でエラーになる場合は、WinFormsとWPFの列挙型を混同している可能性があります。
WinFormsの正しい例です。
C#MessageBox.Show(
"確認します。",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
WPFの正しい例です。
C#MessageBox.Show(
"確認します。",
"確認",
MessageBoxButton.YesNo,
MessageBoxImage.Question
);
違いを整理すると、次のとおりです。
| 項目 | WinForms | WPF |
|---|---|---|
| ボタン | MessageBoxButtons | MessageBoxButton |
| アイコン | MessageBoxIcon | MessageBoxImage |
| 戻り値 | DialogResult | MessageBoxResult |
エラーが出たときは、まず自分のプロジェクトがWinFormsなのかWPFなのかを確認しましょう。
10. MessageBoxを使うときの注意点
10-1. 何度も表示しすぎない
MessageBoxは便利ですが、何度も表示しすぎるとユーザーにとってストレスになります。
たとえば、ループ処理の中で毎回表示すると、何度もOKを押さなければなりません。
C#foreach (var item in items)
{
MessageBox.Show(item.Name);
}
このような使い方は、デバッグ時以外では避けましょう。
複数の結果をまとめて表示するほうが親切です。
C#MessageBox.Show("すべての処理が完了しました。");
10-2. ユーザーに伝わるメッセージ文の書き方
メッセージ文は、ユーザーにとって分かりやすい内容にすることが重要です。
悪い例です。
C#MessageBox.Show("エラーが発生しました。");
少し良い例です。
C#MessageBox.Show("ファイルの保存に失敗しました。保存先を確認してください。");
さらにタイトルとアイコンを付けると、より分かりやすくなります。
C#MessageBox.Show(
"ファイルの保存に失敗しました。保存先を確認してください。",
"保存エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
「何が起きたか」と「どうすればよいか」を入れると、ユーザーが次の行動を取りやすくなります。
10-3. エラー内容をそのまま表示しないほうがよいケース
例外の内容をそのまま表示すると、開発者には便利ですが、ユーザーには分かりにくいことがあります。
C#catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
ex.ToString()にはスタックトレースなどの詳細情報が含まれることがあります。これはユーザー向けメッセージとしては長すぎる場合があります。
本番環境では、次のように分かりやすいメッセージにするのがおすすめです。
C#catch (Exception)
{
MessageBox.Show(
"処理中にエラーが発生しました。時間をおいて再度お試しください。",
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
詳細なエラー情報は、ログファイルに記録する方法を検討しましょう。
10-4. 業務アプリでの確認ダイアログの使い方
業務アプリでは、削除、上書き、確定、送信など、取り消しが難しい操作の前に確認ダイアログを表示することがあります。
C#DialogResult result = MessageBox.Show(
"この内容で登録を確定します。よろしいですか?",
"登録確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (result != DialogResult.Yes)
{
return;
}
ただし、すべての操作に確認を出すと、ユーザーの作業効率が下がります。
確認ダイアログを出すべき場面は、次のようなケースです。
削除する
上書きする
送信する
確定後に変更できない
大量データを更新する
逆に、簡単に取り消せる操作や影響の小さい操作では、確認を省略したほうが使いやすい場合もあります。
10-5. MessageBoxでは不向きなケース
MessageBoxは短い通知や確認には便利ですが、複雑な入力や独自デザインには向いていません。
不向きなケースは次のとおりです。
複数の入力欄を表示したい
独自ボタンを自由に配置したい
文字サイズや色を細かく変えたい
画像や表を表示したい
長い説明文をスクロール付きで見せたい
このような場合は、独自のフォームやダイアログ画面を作るほうが適しています。
C#using (var form = new CustomDialogForm())
{
form.ShowDialog();
}
MessageBoxは、あくまで標準的なメッセージ表示用として使いましょう。
11. MessageBoxのサンプルコード集
11-1. 基本のMessageBox表示サンプル
最も基本的な表示です。
C#MessageBox.Show("こんにちは");
タイトル付きです。
C#MessageBox.Show("処理が完了しました。", "完了");
ボタンクリックイベントで表示する例です。
C#private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show("ボタンがクリックされました。");
}
11-2. ボタン付きMessageBoxのサンプル
OK/キャンセルを表示する例です。
C#DialogResult result = MessageBox.Show(
"処理を実行しますか?",
"確認",
MessageBoxButtons.OKCancel
);
if (result == DialogResult.OK)
{
MessageBox.Show("実行しました。");
}
はい/いいえを表示する例です。
C#DialogResult result = MessageBox.Show(
"削除しますか?",
"確認",
MessageBoxButtons.YesNo
);
if (result == DialogResult.Yes)
{
MessageBox.Show("削除しました。");
}
11-3. アイコン付きMessageBoxのサンプル
情報アイコン付きです。
C#MessageBox.Show(
"保存が完了しました。",
"完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
警告アイコン付きです。
C#MessageBox.Show(
"必須項目が入力されていません。",
"警告",
MessageBoxButtons.OK,
MessageBoxIcon.Warning
);
エラーアイコン付きです。
C#MessageBox.Show(
"処理に失敗しました。",
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
11-4. 戻り値で条件分岐するサンプル
ユーザーが押したボタンによって処理を分ける例です。
C#DialogResult result = MessageBox.Show(
"アプリケーションを終了しますか?",
"終了確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (result == DialogResult.Yes)
{
Application.Exit();
}
else
{
MessageBox.Show("終了をキャンセルしました。");
}
switch文で分岐することもできます。
C#DialogResult result = MessageBox.Show(
"変更内容を保存しますか?",
"確認",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Question
);
switch (result)
{
case DialogResult.Yes:
SaveData();
Close();
break;
case DialogResult.No:
Close();
break;
case DialogResult.Cancel:
// 何もしない
break;
}
11-5. エラー処理で使うサンプル
ファイル読み込み時のエラー処理例です。
C#try
{
string text = File.ReadAllText("sample.txt");
MessageBox.Show(text, "ファイル内容");
}
catch (FileNotFoundException)
{
MessageBox.Show(
"ファイルが見つかりませんでした。",
"ファイルエラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
catch (Exception)
{
MessageBox.Show(
"ファイルの読み込み中にエラーが発生しました。",
"エラー",
MessageBoxButtons.OK,
MessageBoxIcon.Error
);
}
特定の例外を先に処理し、最後に一般的なExceptionを処理すると分かりやすくなります。
11-6. WinFormsとWPFのサンプル比較
WinFormsの例です。
C#using System;
using System.Windows.Forms;
namespace WinFormsApp
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show(
"終了しますか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
if (result == DialogResult.Yes)
{
Close();
}
}
}
}
WPFの例です。
C#using System.Windows;
namespace WpfApp
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
MessageBoxResult result = MessageBox.Show(
"終了しますか?",
"確認",
MessageBoxButton.YesNo,
MessageBoxImage.Question
);
if (result == MessageBoxResult.Yes)
{
Close();
}
}
}
}
同じMessageBoxでも、WinFormsとWPFでは指定する列挙型が異なるため注意しましょう。
12. C# MessageBoxに関するよくある質問
12-1. MessageBoxはどのアプリでも使える?
MessageBoxは、基本的にWindowsデスクトップアプリで使う機能です。WinFormsやWPFではよく使われます。
一方、ASP.NETのようなWebアプリでは、サーバー側のC#コードから直接ユーザーの画面にWindowsのMessageBoxを表示することはできません。Webアプリで確認ダイアログを出す場合は、JavaScriptのalertやconfirm、またはフロントエンド側のモーダルダイアログを使います。
コンソールアプリでも設定次第で表示できますが、通常はConsole.WriteLineを使うほうが自然です。
12-2. MessageBoxの文字サイズやデザインは変更できる?
標準のMessageBoxでは、文字サイズ、ボタン配置、背景色などを自由に変更することは基本的にできません。
C#MessageBox.Show("標準デザインで表示されます。");
独自のデザインにしたい場合は、自分でフォームを作成してShowDialogで表示します。
C#using (var dialog = new CustomDialogForm())
{
dialog.ShowDialog();
}
文字サイズやレイアウト、独自ボタンを使いたい場合は、カスタムダイアログを作るのがおすすめです。
12-3. MessageBoxに独自ボタンは追加できる?
標準のMessageBoxに自由な名前のボタンを追加することはできません。
使えるボタンは、MessageBoxButtonsで定義されているものに限られます。
C#MessageBoxButtons.OK
MessageBoxButtons.OKCancel
MessageBoxButtons.YesNo
MessageBoxButtons.YesNoCancel
たとえば、「保存して閉じる」「保存せず閉じる」「戻る」のような独自ボタンを表示したい場合は、独自フォームを作る必要があります。
12-4. MessageBoxを自動で閉じることはできる?
標準のMessageBoxには、指定秒数後に自動で閉じる簡単なオプションはありません。
自動で閉じる通知を作りたい場合は、独自フォームや通知UIを作るほうが安全です。
C#// 標準のMessageBoxは、基本的にユーザーがボタンを押すまで閉じません。
MessageBox.Show("確認してください。");
一定時間で消える通知が必要な場合は、ステータスバー、トースト通知、カスタムフォームなどを検討しましょう。
12-5. MessageBoxとフォームダイアログの違いは?
MessageBoxは、短いメッセージを表示するための標準ダイアログです。
C#MessageBox.Show("保存しました。");
一方、フォームダイアログは、自分で作成した画面をダイアログとして表示するものです。
C#using (var form = new SettingsForm())
{
form.ShowDialog();
}
違いをまとめると、次のようになります。
| 項目 | MessageBox | フォームダイアログ |
|---|---|---|
| 用途 | 短い通知・確認 | 複雑な入力・独自画面 |
| デザイン変更 | 難しい | 自由に変更できる |
| ボタン | 定型ボタンのみ | 自由に配置できる |
| 入力欄 | 基本的になし | 自由に追加できる |
短い確認ならMessageBox、複雑な操作ならフォームダイアログを使いましょう。
12-6. 初心者はまずどの書き方を覚えればよい?
初心者は、まず次の3つを覚えるのがおすすめです。
メッセージだけ表示する書き方です。
C#MessageBox.Show("処理が完了しました。");
タイトルとアイコンを付ける書き方です。
C#MessageBox.Show(
"保存が完了しました。",
"完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
はい/いいえで処理を分岐する書き方です。
C#DialogResult result = MessageBox.Show(
"削除しますか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (result == DialogResult.Yes)
{
// 削除処理
}
この3パターンを覚えておけば、基本的なWindowsフォームアプリでは十分対応できます。
まとめ
C#のMessageBoxは、Windowsアプリでメッセージを表示するための便利な機能です。MessageBox.Showを使えば、短いコードでメッセージ、タイトル、ボタン、アイコンを表示できます。
基本の書き方は次のとおりです。
C#MessageBox.Show("メッセージ");
タイトル付きで表示する場合は、次のように書きます。
C#MessageBox.Show("保存が完了しました。", "完了");
ボタンやアイコンを指定する場合は、次の形を覚えておくと便利です。
C#MessageBox.Show(
"保存が完了しました。",
"完了",
MessageBoxButtons.OK,
MessageBoxIcon.Information
);
ユーザーが押したボタンによって処理を分岐したい場合は、DialogResultを使います。
C#DialogResult result = MessageBox.Show(
"削除しますか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Warning
);
if (result == DialogResult.Yes)
{
// 削除処理
}
WinFormsではSystem.Windows.Forms.MessageBox、WPFではSystem.Windows.MessageBoxを使います。また、WinFormsではDialogResult、WPFではMessageBoxResultを使う点に注意しましょう。
MessageBoxは便利ですが、何度も表示しすぎるとユーザーの操作を妨げます。完了通知、入力エラー、削除確認、例外発生時の通知など、必要な場面で分かりやすいメッセージを表示することが大切です。

