記事内にはプロモーションが含まれています

【C#】ダイアログ表示のテクニックまとめ!MessageBoxの基本から位置・ボタン名のカスタマイズまで

【C#】ダイアログ表示のテクニックまとめ!MessageBoxの基本から位置・ボタン名のカスタマイズまで C#

C#でWindowsアプリケーション(Windows FormsやWPF)を開発していると、ユーザーに確認を求めたり、完了メッセージを通知したりするために「ダイアログ」を表示したい場面が頻繁に訪れます。

最も手軽なのは MessageBox.Show を使う方法ですが、開発が進むにつれて「ダイアログの表示位置を画面の中央に変えたい」「『はい/いいえ』ではなく『保存する/破棄する』というボタン名にしたい」といった要望が出てくるものです。

しかし、標準のメッセージボックスはカスタマイズ性が低く、こうした要望を実現しようとすると意外な壁にぶつかります。

この記事では、C#におけるダイアログ表示の基本となる MessageBox の使い方から、ファイル選択ダイアログの実装、そして標準機能では難しい「位置変更」や「ボタン名変更」を解決するための「自作ダイアログ」の作り方まで、サンプルコード付きで徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はプログラミングスクールを運営
  • モットーは「利他の精神」
💻 本記事の検証環境(2026年2月確認)
  • 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.QuestionMessageBoxIcon.Error を指定することで、システム標準のアイコンを表示し、メッセージの重要度をユーザーに視覚的に伝えることができます。

ファイルを開く・保存するダイアログの使い方

メッセージだけでなく、ユーザーにファイルを選択させたり、保存先を指定させたりするダイアログも頻出です。

これらは OpenFileDialogSaveFileDialog クラスを使用します。

ファイル選択ダイアログ(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#のスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

業務システム開発やアプリ開発、ゲーム開発において需要の高いC#を扱えるエンジニアは、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなC#の案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
エンジニアのキャリア・スキルアップ相談窓口
当ブログの読者に選ばれている、実績豊富な転職エージェントを厳選しました。
【転職】年収・環境を改善したい
年収アップにこだわりたい方 (平均アップ額138万円の実績)
未経験・経験者問わず幅広く探したい方
業界に精通した担当者に相談したい方
ゲーム業界への転職を志望する方
エンジニア未経験からキャリアを築く方
【独立】フリーランスとして稼ぎたい
国内最大級のフリーランス案件数から比較したい方
週1〜3日など柔軟な働き方を希望する方
【学習】スキルに不安のある方向け(格安スクール「デイトラ」)
C#
スポンサーリンク
code-izumiをフォローする