Posted at

C# Winforms フォルダ選択ダイアログ

C# windows formsのフォルダ選択ダイアログについてです。

どうも標準のFolderBrowserDialogが使いにくかったので

調べてみたところファイル選択ダイアログでもフォルダ選択できるようなので

備忘録として残しておきます。


試したアプリ

image.png

色々な方法がありましたが二つ分かりやすくて簡単なやり方を見つけたので紹介します。

上のような簡易アプリで試しました。


方法1

private void Button1_Click(object sender, EventArgs e)

{
var dialog = new FolderSelectDialog
{
InitialDirectory = Environment.CurrentDirectory,
Title = "Select a folder to import music from"
};
if (dialog.Show(Handle))
{
this.textBox1.Text = dialog.FileName;
}
}


FolderSelectDialogクラスはStackOverflowのこの投稿で作成されているものです。


詳細はリンク先を参照ください。

リフレクションとか使ってある意味ハックしているような感じでしょうか。

フォルダをクリックしたら選択状態になるので直観的に使いやすくて好きです。


方法2

private void Button2_Click(object sender, EventArgs e)

{
using (var ofd = new OpenFileDialog() {
FileName = "Folder Selection",
Filter = "Folder|.",
ValidateNames = false,
CheckFileExists = false,
CheckPathExists = true,
})
{
if (ofd.ShowDialog() == DialogResult.OK)
{
this.textBox1.Text = Path.GetDirectoryName(ofd.FileName);
}
}
}

こちらはOpenFileDialogのプロパティを使ってフォルダを選択するやり方です。

使い方は方法1とほとんど変わりませんが最下層でないフォルダを選択する時はクリック状態だけでは駄目で

開いた状態でないと選択できないのが少しだけ使いづらいです。

下記記事の方も言われていますが普段使いであればこれで十分だと思います。


OpenFileDialog でフォルダを指定する [ WinForms ]



参考・出典元

https://qiita.com/souten21kobayashi/items/bb25ca320e49b269ef9e

https://qiita.com/otagaisama-1/items/b0804b9d6d37d82950f7

https://stackoverflow.com/questions/31059/how-do-you-configure-an-openfiledialog-to-select-folders

https://stackoverflow.com/questions/15368771/show-detailed-folder-browser-from-a-propertygrid

上記URLに感謝です。