なぜそんなことを
WinForms アプリでフォルダを選択させる際は FolderBrowseDialog を使用するのが一般的だと思いますが、FolderBrowserDialogはいろいろ使いにくい点があります。
- パスをキーボード入力で指定できない
- それ故に選択画面開いてからUNCパスを指定できない
ツリーのため単純に使いにくい
OpenFileDialogを使ったフォルダ指定方法
OpenFileDialogでのフォルダ指定例
//using System.IO;
void BrowseFolder()
{
using (var ofd = new OpenFileDialog() { FileName = "SelectFolder", Filter = "Folder|.", CheckFileExists = false })
{
if (ofd.ShowDialog() == DialogResult.OK)
{
Console.WriteLine(Path.GetDirectoryName(ofd.FileName));
}
}
}
補足説明
- OpenFileDialog の Filter プロパティのフィルター文字列に . を指定するとファイル表示されずフォルダだけ選べるようになります。
- FileName プロパティに適当な文字列を入れておくことで、ファイルを選択していなくてもその名前のファイルが選ばれている状態になります。
- CheckFileExists プロパティを false にすることでファイルがなくても指定できます。
- System.IO.Path.GetDirectoryName() で適当ファイル名部分を消すことでフォルダのパスが得られます。
不都合があることもありますが、実用上これで大体役割を果たします。