C#でWindowsアプリケーション(Windows FormsやWPF)を開発していると、ユーザーに確認を求めたり、完了メッセージを通知したりするために「ダイアログ」を表示したい場面が頻繁に訪れます。
最も手軽なのは MessageBox.Show を使う方法ですが、開発が進むにつれて「ダイアログの表示位置を画面の中央に変えたい」「『はい/いいえ』ではなく『保存する/破棄する』というボタン名にしたい」といった要望が出てくるものです。
この記事では、C#におけるダイアログ表示の基本となる MessageBox の使い方から、ファイル選択ダイアログの実装、そして標準機能では難しい「位置変更」や「ボタン名変更」を解決するための「自作ダイアログ」の作り方まで、サンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
まずは基本!MessageBox.Showでメッセージを表示する
C#でダイアログを表示する最も基本的な方法は、.NETが提供している MessageBox クラスを使用することです。
Windows FormsとWPFで名前空間は異なりますが、基本的な使い方は非常に似ています。
テキスト・タイトル・ボタン・アイコンを指定する
MessageBox.Show メソッドは、引数を追加することで表示内容を細かく設定できます。
using System;
using System.Windows.Forms; // WPFの場合は System.Windows
namespace DialogSample
{
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
private void ShowBasicDialog()
{
// 第1引数: 本文
// 第2引数: タイトルバーの文字
// 第3引数: ボタンの種類(OK, OKCancel, YesNoなど)
// 第4引数: アイコン(Information, Error, Warningなど)
DialogResult result = MessageBox.Show(
"処理を実行しますか?",
"確認",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question
);
// ユーザーがどのボタンを押したか判定
if (result == DialogResult.Yes)
{
// 「はい」が押された時の処理
Console.WriteLine("処理を実行しました。");
}
else
{
// 「いいえ」が押された時の処理
Console.WriteLine("キャンセルされました。");
}
}
}
}
MessageBox.Show は静的メソッドとして呼び出します。
戻り値として DialogResult 列挙型(WPFでは MessageBoxResult)が返されるため、これを if 文などで判定することで、ユーザーの選択に応じた処理分岐が可能になります。
第4引数に MessageBoxIcon.Question や MessageBoxIcon.Error を指定することで、システム標準のアイコンを表示し、メッセージの重要度をユーザーに視覚的に伝えることができます。
ファイルを開く・保存するダイアログの使い方
メッセージだけでなく、ユーザーにファイルを選択させたり、保存先を指定させたりするダイアログも頻出です。
これらは OpenFileDialog や SaveFileDialog クラスを使用します。
ファイル選択ダイアログ(OpenFileDialog)の実装
using System;
using System.Windows.Forms;
private void OpenFile()
{
// using宣言を使ってリソースを確実に破棄(C# 8.0以降)
using OpenFileDialog openFileDialog = new OpenFileDialog();
// ダイアログのタイトル
openFileDialog.Title = "読み込むファイルを選択してください";
// 初期表示するディレクトリ(カレントディレクトリ)
openFileDialog.InitialDirectory = Environment.CurrentDirectory;
// ファイルフィルタ(テキストファイルのみなど)
openFileDialog.Filter = "テキストファイル (*.txt)|*.txt|すべてのファイル (*.*)|*.*";
// ダイアログを表示し、OKボタンが押されたか確認
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
// 選択されたファイルのパスを取得
string filePath = openFileDialog.FileName;
MessageBox.Show($"選択されたファイル: {filePath}");
}
}
ShowDialog() メソッドを呼び出すと、ファイル選択画面がモーダル(他の操作を受け付けない状態)で表示されます。
ユーザーがファイルを選んで「開く」を押すと DialogResult.OK が返るため、その後に FileName プロパティからパスを取得します。
Filter プロパティを設定することで、選択可能なファイルの種類を制限でき、ユーザーの誤操作を防ぐことができます。
標準MessageBoxの限界と「自作ダイアログ」の必要性
開発現場でよくある要望として、「ダイアログを親画面の真ん中ではなく、特定の位置に出したい」「ボタンの文字を独自の言葉に変えたい」というものがあります。
しかし、標準の MessageBox には、表示位置を指定するプロパティや、ボタンのテキストを変更する機能はありません。
Win32 API(Windowsの深い部分の機能)を使えば無理やり変更することも可能ですが、コードが複雑になり、バグの原因にもなります。
そのため、現在のモダンな開発においては、「フォーム(Window)を自作してダイアログとして表示する」のが最も推奨される解決策です。
自由自在!フォームを使った自作ダイアログの作り方
自作ダイアログといっても、難しいことはありません。
通常のフォーム(Form)を作成し、それを ShowDialog() メソッドで呼び出すだけです。
これなら、ボタンのデザインも配置場所も自由に決められます。
ステップ1:ダイアログ用のフォームを作成する
Visual StudioなどのIDEで、新しいフォーム(例:CustomDialogForm)を追加し、ラベルやボタンを配置します。
// CustomDialogForm.cs (ダイアログ側のコード)
using System;
using System.Windows.Forms;
public partial class CustomDialogForm : Form
{
// コンストラクタでメッセージを受け取る
public CustomDialogForm(string message)
{
InitializeComponent();
// フォーム上のラベルにメッセージを表示
lblMessage.Text = message;
// フォームの表示位置設定(親フォームの中央に設定例)
this.StartPosition = FormStartPosition.CenterParent;
// 必要に応じてウィンドウ枠を消すなどのデザイン調整
// this.FormBorderStyle = FormBorderStyle.FixedDialog;
}
// 「保存する」ボタン
private void btnSave_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.Yes; // 結果をセット
this.Close(); // 閉じる
}
// 「破棄する」ボタン
private void btnDiscard_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.No;
this.Close();
}
}
ステップ2:メイン画面から自作ダイアログを呼び出す
作成したフォームを、メイン画面から呼び出します。
// MainForm.cs (呼び出し側)
private void ShowCustomDialog()
{
// 自作ダイアログのインスタンス生成
using CustomDialogForm dialog = new CustomDialogForm("変更内容を保存しますか?");
// 表示位置を手動で調整したい場合(スクリーン座標)
// dialog.StartPosition = FormStartPosition.Manual;
// dialog.Location = new System.Drawing.Point(100, 100);
// モーダルダイアログとして表示
DialogResult result = dialog.ShowDialog(this);
// 結果の判定
if (result == DialogResult.Yes)
{
Console.WriteLine("保存処理を実行");
}
else if (result == DialogResult.No)
{
Console.WriteLine("破棄処理を実行");
}
}
自作した CustomDialogForm 内でボタンが押された際に、this.DialogResult プロパティに値を設定してから Close() することで、呼び出し元に結果を伝えることができます。
StartPosition プロパティを使えば、「親画面の中央」や「スクリーンの左上」など、表示位置を柔軟に制御できます。
ボタンのテキストもデザイナー上で自由に変更できるため、「保存する」「破棄する」といったユーザーフレンドリーなUIを簡単に構築可能です。
C#のスキルを活かして年収を上げる方法
以上、C#におけるダイアログ表示のテクニックについて解説してきました。
業務システム開発やアプリ開発、ゲーム開発において需要の高いC#を扱えるエンジニアは、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



