選択ダイアログの使い方

この記事は約4分で読めます。

ダイアログ(ダイアログボックス)とは、ユーザーに何らかの選択を行わせる際、その間だけ表示される子画面のことです。

例えば、何かのアプリを利用時、ファイル選択をしようとすると、下記の様な子画面が表示されると思いますが、これがダイアログです。

ダイアログは自分で一から作ることも出来ますが、ファイル選択やフォルダ選択等、よく使われるものは、あらかじめ用意されています。


ダイアログの使い方

ダイアログは、メインとなる画面から呼び出しますが、ダイアログ側で何らかのボタン、例えば「開く」「保存」「選択」「キャンセル」などが押されたとき、再び呼び出し元に戻ってきます。

その際、押されたボタンを戻り値として受け取ることができますので、呼び出し側は何のボタンが押されたかを確認します。

「保存」「選択」など、「キャンセル」以外のボタンが押された事が確認できれば、それぞれのダイアログに用意されたプロパティを使って、選択された値を取得し、後続の処理で活用します。

ダイアログの表示方法

ダイアログを表示するには、あらかじめインスタンスを生成しておきます。

その方法には2通りあり、1つはレイアウト作成時に指定する方法です。

TextBoxやButtonなどのコントロールと同様に、Visual Studioのレイアウトエディタからドラッグ&ドロップすることで、Visual Studioが自動生成する画面レイアウトのソースコードに、インスタンスの生成コードが追加されます。

画像に alt 属性が指定されていません。ファイル名: dialog_dragdrop-1024x578.jpg

もう1つは、コンストラクタやフォームのLoadイベントの中に、インスタンスを生成するソースコードを自分で記述する方法です。

どちらの方法を使っても結果は同じなので、好きな方法を選べば良いと思います。

ダイアログの表示方法

レイアウトエディタからのドラッグ&ドロップ、ソースコードへの記述のどちらにせよ、そのままでは画面に表示されません。

ShowDialog メソッドを呼び出すことでダイアログが画面に表示され、選択できるようになります。

戻り値の判定と選択された値の取得

ダイアログが何のボタンが押されて終了したかは、戻り値で判断できます。

そして、キャンセル以外のボタンが押されたときは、何らかの値が選択されたという事なので、ダイアログ毎に用意されたプロパティを使って値を取得します。

通常は以下のような記述をします。

この例はファイルオープンダイアログというファイル選択時に使用するダイアログのソースコードです。

ShowDialog()の戻り値としては、DialogResult の列挙型が返ってきます。

この例では、DialogResult.OK が返ってきた場合、FileNameプロパティの値を変数に代入しています。

DialogResult列挙型には以下の値がありますが、ダイアログの種類によって使い分ける必要があります。 

列挙型の値押されたボタンの種類
Abort “中止” という表記のボタンが押された時
Cancel “キャンセル” という表記のボタンが押された時
Ignore “無視” という表記のボタンが押された時
No “いいえ” という表記のボタンが押された時
OK “OK” という表記のボタンが押された時
Retry “再試行” という表記のボタンが押された時
Yes “はい” という表記のボタンが押された時

ダイアログの種類

あらかじめ用意されているダイアログは次の5種類です。

用途ダイアログのクラス名主なプロパティ
色の選択ColorDialogColor
フォルダーを選択FolderBrowserDialogSelectedPath
ファイルを開くための選択OpenFileDialogFileName
ファイル保存のための選択SaveFildDialogFileName
フォントの選択FontDialogFont

ダイアログの自作

ダイアログは自分で1から作ることが出来ます。

ダイアログは単なるWindowフォームで出来ているため、Windowフォームクラスを追加し、プロパティを設定することで簡単に作成できます。

通常のWindowフォームには DialogResult というプロパティがありますので、ここにDialogResult列挙体の値をセットした後、Close()メソッドでダイアログを閉じます。

Windowフォームには、ダイアログとして振る舞うためのShowDialogメソッドも用意されているため、呼び出し側ではインスタンスを生成した後で、ShowDialogを呼び出します。

後は、戻り値に応じて処理を書けばOKです。

タイトルとURLをコピーしました