ダイアログ(ダイアログボックス)とは、ユーザーに何らかの選択を行わせる際、その間だけ表示される子画面のことです。
例えば、何かのアプリを利用時、ファイル選択をしようとすると、下記の様な子画面が表示されると思いますが、これがダイアログです。

ダイアログは自分で一から作ることも出来ますが、ファイル選択やフォルダ選択等、よく使われるものは、あらかじめ用意されています。
ダイアログの使い方
ダイアログは、メインとなる画面から呼び出しますが、ダイアログ側で何らかのボタン、例えば「開く」「保存」「選択」「キャンセル」などが押されたとき、再び呼び出し元に戻ってきます。
その際、押されたボタンを戻り値として受け取ることができますので、呼び出し側は何のボタンが押されたかを確認します。
「保存」「選択」など、「キャンセル」以外のボタンが押された事が確認できれば、それぞれのダイアログに用意されたプロパティを使って、選択された値を取得し、後続の処理で活用します。

ダイアログの表示方法
ダイアログを表示するには、あらかじめインスタンスを生成しておきます。
その方法には2通りあり、1つはレイアウト作成時に指定する方法です。
TextBoxやButtonなどのコントロールと同様に、Visual Studioのレイアウトエディタからドラッグ&ドロップすることで、Visual Studioが自動生成する画面レイアウトのソースコードに、インスタンスの生成コードが追加されます。

もう1つは、コンストラクタやフォームのLoadイベントの中に、インスタンスを生成するソースコードを自分で記述する方法です。
1 2 |
//ファイルオープンダイアログのインスタンスを生成 OpenFileDialog dialog = new OpenFileDialog(); |
どちらの方法を使っても結果は同じなので、好きな方法を選べば良いと思います。
ダイアログの表示方法
レイアウトエディタからのドラッグ&ドロップ、ソースコードへの記述のどちらにせよ、そのままでは画面に表示されません。
ShowDialog メソッドを呼び出すことでダイアログが画面に表示され、選択できるようになります。
1 2 3 4 |
//ファイルオープンダイアログのインスタンスを生成 OpenFileDialog dialog = new OpenFileDialog(); //ダイアログを表示 dialog.ShowDialog() |
戻り値の判定と選択された値の取得
ダイアログが何のボタンが押されて終了したかは、戻り値で判断できます。
そして、キャンセル以外のボタンが押されたときは、何らかの値が選択されたという事なので、ダイアログ毎に用意されたプロパティを使って値を取得します。
通常は以下のような記述をします。
1 2 3 4 5 6 7 8 9 |
//ファイルオープンダイアログのインスタンスを生成 OpenFileDialog dialog = new OpenFileDialog(); //ファイルオープンダイアログの表示と戻り値のチェック if(dialog.ShowDialog() == DialogResult.OK) { //ファイルオープンダイアログで指定したファイル名を変数に格納 var filename = dialog.FileName; } |
この例はファイルオープンダイアログというファイル選択時に使用するダイアログのソースコードです。
ShowDialog()の戻り値としては、DialogResult の列挙型が返ってきます。
この例では、DialogResult.OK が返ってきた場合、FileNameプロパティの値を変数に代入しています。
DialogResult列挙型には以下の値がありますが、ダイアログの種類によって使い分ける必要があります。
列挙型の値 | 押されたボタンの種類 |
---|---|
Abort | “中止” という表記のボタンが押された時 |
Cancel | “キャンセル” という表記のボタンが押された時 |
Ignore | “無視” という表記のボタンが押された時 |
No | “いいえ” という表記のボタンが押された時 |
OK | “OK” という表記のボタンが押された時 |
Retry | “再試行” という表記のボタンが押された時 |
Yes | “はい” という表記のボタンが押された時 |
ダイアログの種類
あらかじめ用意されているダイアログは次の5種類です。
用途 | ダイアログのクラス名 | 主なプロパティ |
---|---|---|
色の選択 | ColorDialog | Color |
フォルダーを選択 | FolderBrowserDialog | SelectedPath |
ファイルを開くための選択 | OpenFileDialog | FileName |
ファイル保存のための選択 | SaveFildDialog | FileName |
フォントの選択 | FontDialog | Font |
ダイアログの自作
ダイアログは自分で1から作ることが出来ます。
ダイアログは単なるWindowフォームで出来ているため、Windowフォームクラスを追加し、プロパティを設定することで簡単に作成できます。

通常のWindowフォームには DialogResult というプロパティがありますので、ここにDialogResult列挙体の値をセットした後、Close()メソッドでダイアログを閉じます。
1 2 3 4 5 6 7 8 9 10 11 |
private void UxOK_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.OK; this.Close(); } private void UxCancel_Click(object sender, EventArgs e) { this.DialogResult = DialogResult.Cancel; this.Close(); } |
Windowフォームには、ダイアログとして振る舞うためのShowDialogメソッドも用意されているため、呼び出し側ではインスタンスを生成した後で、ShowDialogを呼び出します。
1 2 3 4 5 |
MyDialog mydialog = new MyDialog(); if(mydialog.ShowDialog() == DialogResult.OK) { //OKが押されたときの処理 } |
後は、戻り値に応じて処理を書けばOKです。