C#:ダイアログでフォルダを選択する

フォルダ選択ダイアログの画像C#
スポンサーリンク

C#を使ってフォルダダイアログを表示する処理です。

アプリケーションによっては、選択したフォルダの中身を表示したり、その中にある特定のファイルを検索したりする場合に使うことが多いかと思います。

以下は、ダイアログを使って選択したフォルダ名を取得する部分までの処理をC#のWindowsフォームアプリを使って解説しています。

スポンサーリンク

今回のサンプルの実行イメージ

「フォルダを選択する」ボタンをクリックするとフォルダ選択ダイアログが開きます。
フォルダを選択する(実行イメージ)画像

適当なフォルダを選択するとメッセージボックスで選択したフォルダ名が表示されます。
フォルダ選択ダイアログでOK時の処理の画像

では早速、作っていきましょう。

プロジェクトの準備

ファイル >新規作成 >プロジェクト… からWindowsフォームアプリケーションを選択してください。

プロジェクト名はselectFolderとしておきます。

フォームにボタンを1つ貼り付けてください。

フォルダを選択する(デザイン)の画像

デザインはこれだけです。
ボタンを押した時にフォルダ選択ダイアログ(FolderBrowserDialogクラス)が表示されるプログラムを以下に示します。

FolderBrowserDialogクラスを使ってフォルダ名を取得する

フォルダ選択用のダイアログクラスが.NET Frameworkクラスライブラリに標準で用意されています。

FolderBrowserDialogクラス

基本的な使い方はクラスをインスタンス化して、ShowDialog()メソッドを呼び出すだけです。
SelectedPathプロパティが、ユーザが選択したフォルダのパス名になります。

// FolderBrowserDialogクラスのインスタンス生成
FolderBrowserDialog fbd = new FolderBrowserDialog();
// フォルダ選択ダイアログ表示
fbd.ShowDialog();
// 選択されたフォルダ名をコンソールに表示
Console.WriteLine(fbd.SelectedPath);

ただし、これだけでは不十分です。
通常、ダイアログのタイトル、ルートフォルダ、初期表示フォルダなどの項目の設定をしてからダイアログ表示を行う手順になります。

記述例)fbdはインスタンス

ダイアログのタイトル:

fbd.Description = "フォルダを選択してください";

ルートフォルダの設定:

fbd.RootFolder = Environment.SpecialFolder.Desktop;

※ルートフォルダは、一番階層が上という意味ですが、デスクトップを指定することが一般的です。
※定数としてEnvironment.SpecialFolderにDesktopやFavoritesなどのフォルダ名が用意されています。
※ルートフォルダの設定をしない場合、デスクトップがルートフォルダになります。

初期選択されているフォルダの設定:

fbd.SelectedPath = @"c:\";

※RootFolder以下にあるフォルダである必要があります。

ユーザーが新しいフォルダを作成できるかどうかの設定:

fbd.ShowNewFolderButton = true;

※デフォルトはtrueです。

ダイアログを表示する:

//ダイアログを表示する
if (fbd.ShowDialog() == DialogResult.OK)
{
	// 選択したフォルダ名を取得
	string myPath = fbd.SelectedPath;
	//選択されたフォルダを表示する
	MessageBox.Show(myPath + "が選択されました", "選択結果", MessageBoxButtons.OK, MessageBoxIcon.Information);
	Console.WriteLine(myPath);
}

※キャンセルされた場合を考慮して、必要な処理をif (fbd.ShowDialog() == DialogResult.OK)に記述します。
※SelectedPathプロパティが、ユーザが選択したフォルダのパス名になります。
※上記では、メッセージボックスに選択されたフォルダパス名を表示しています。

これらの処理を今回は、ShowFolderDialogというメソッドにまとめました。

/*
 * フォルダダイアログを表示する
 */
private void ShowFolderDialog()
{
	// FolderBrowserDialogクラスのインスタンス生成
	FolderBrowserDialog fbd = new FolderBrowserDialog();

	// ダイアログタイトルを設定
	fbd.Description = "フォルダを選択してください";
	// ルートフォルダの設定(RootFolderに何も指定しなければデスクトップがルートになる)
	fbd.RootFolder = Environment.SpecialFolder.Desktop;
	// 初期選択されているフォルダの設定(今回は、ローカルディスクのc:\を指定している)
	// 初期選択フォルダは、RootFolder以下にあるフォルダである必要がある
	fbd.SelectedPath = @"c:\";
	// ユーザーが新しいフォルダを作成できるようにする設定(デフォルトでtrue)
	fbd.ShowNewFolderButton = true;

	//ダイアログを表示する
	if (fbd.ShowDialog() == DialogResult.OK)
	{
		// 選択したフォルダ名を取得
		string myPath = fbd.SelectedPath;
		//選択されたフォルダを表示する
		MessageBox.Show(myPath + "が選択されました", "選択結果", MessageBoxButtons.OK, MessageBoxIcon.Information);
		Console.WriteLine(myPath);
	}
}

ボタンをクリックしたとき、このメソッドを呼び出すことにします。
今回のサンプルのソースコード全体を以下に示します。

ソースコード全体

ボタンイベント(button1_Click)とフォームロードイベント(Form1_Load)は、それぞれボタンとフォームをダブルクリックして作成してください。
前述したShowFolderDialogメソッドに今回必要なフォルダ選択処理を記述しています。

コメント

  1. K より:

    ダイアログボックスのコンボボックスなどで選択したもの実行させるためにどーやってやるのかなど知りたいことがあります。
    教えていただけませんか?

    • mrgarita より:

      こんにちは。
      ご質問の「ダイアログボックスのコンボボックスなどで選択したもの実行させる」とは、例えばどういったことを差すのでしょうか?

      mrgarita