フォルダ参照ダイアログ(OpenFileDialog編)

ダイアログ

System.Windows.Forms.OpenFileDialogクラス

System.Windows.FormsにあるOpenFileDialogを利用してフォルダを参照できるようにします。

フォルダを選択するためのFolderBrowserDialogが用意されていますが、以下のような画面になります。

例えばVisualStudioで「ファイル…開く…フォルダー」を開くと以下ののような画面です。

サンプル

一番簡単にフォルダ参照ダイアログを表示するには以下のようにするとよいでしょう。

using (var dlg = new OpenFileDialog())
{
    dlg.Title = "フォルダを選択してください。";
    dlg.FileName = "SelectFolder";
    dlg.Filter = "Folder|.";
    dlg.CheckFileExists = false;

    if (dlg.ShowDialog() == DialogResult.OK)
    {
        MessageBox.Show(System.IO.Path.GetDirectoryName(dlg.FileName));
    }
}

OpenFileDialogクラスはIDisposableインターフェースを継承しているのでusingを付けて使用後は解放することができます。もし宣言したファイル参照ダイアログクラスオブジェクトを再利用するということでなければusingを付けるべきだと考えます。

表示画面

注意点があります。フォルダを選択して「開く」ボタンを押すとフォルダの中に入っていきます。その状態でもう一度「開く」ボタンを押さないとフォルダパスを取得できません。そこが通常のものと動きが違ってきます。

プロパティ

FileOpenDialogクラスに用意されているプロパティを設定することで、ダイアログのタイトルなどいろんな設定ができるようになります。

以下に代表的になプロパティを紹介します。

プロパティ名説明
Titleダイアログに表示するタイトルを設定します。
FileName初期ファイル名を設定します。今回はファイル名は捨てるので便宜的に「SelectFolder」にしています。
Filter拡張子をしていします。フォルダを指定する場合、"Folder|."を指定しています。
CheckFileExistsファイルを選択しているわけではないので、ファイルの存在チェックは行いません。
ここでは「false」を指定します。

こんな関数はいかがでしょうか?

フォルダ参照ダイアログの関数を作りました。

関数例

/// <summary>
/// フォルダ参照ダイアログを呼び出してパスを取得する
/// </summary>
/// <param name="select_path">初期パス(in)/選択パス(out)</param>
/// <returns>true/false</returns>
private bool GetDirNameFromOpenFileDialog(ref string select_path)
{
    using (var dlg = new OpenFileDialog())
    {
        dlg.Title = "フォルダを選択してください。";
        dlg.FileName = "SelectFolder";
        dlg.Filter = "Folder|.";
        dlg.CheckFileExists = false;

        if (dlg.ShowDialog() != DialogResult.OK)
        {
            //開く以外を選択された場合はfalseを返す。
            return false;
        }

        select_path = System.IO.Path.GetDirectoryName(dlg.FileName);

    }

    return true;
}

使用例

private void btnSansyo_Click(object sender, EventArgs e)
{
    //初期フォルダ名を設定する場合はここにセットする
    string dir = this.DirNameTextbox.Text;

    //フォルダ参照ダイアログを開く、キャンセルの場合は関数から抜ける
    if (GetDirNameFromOpenFileDialog(ref dir) == false) return;

    //取得したフォルダ名をテキストボックスにセットする
    this.DirNameTextbox.Text = dir;
}

実行結果

まとめ

フォルダ保存ダイアログを使ってダイアログを作成するときにこの記事が皆様のお役に立てたなら幸いです。

コメント

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