下図のような「フォルダの選択」ダイアログを表示する方法を紹介します。
.NET Framework 1.1以降ではFolderBrowserDialogクラスを使用して表示します。まずはこの方法から説明します。
次の例ではルートフォルダをデスクトップ、始めに選択されているフォルダを"C:\Windows"として「フォルダの選択」ダイアログを表示しています。また、ユーザーが新しいフォルダを作成できるように「新しいフォルダ」ボタンが表示されるようにしています。
'FolderBrowserDialogクラスのインスタンスを作成 Dim fbd As New FolderBrowserDialog '上部に表示する説明テキストを指定する fbd.Description = "フォルダを指定してください。" 'ルートフォルダを指定する 'デフォルトでDesktop fbd.RootFolder = Environment.SpecialFolder.Desktop '最初に選択するフォルダを指定する 'RootFolder以下にあるフォルダである必要がある fbd.SelectedPath = "C:\Windows" 'ユーザーが新しいフォルダを作成できるようにする 'デフォルトでTrue fbd.ShowNewFolderButton = True 'ダイアログを表示する If fbd.ShowDialog(Me) = DialogResult.OK Then '選択されたフォルダを表示する Console.WriteLine(fbd.SelectedPath) End If
//FolderBrowserDialogクラスのインスタンスを作成 FolderBrowserDialog fbd = new FolderBrowserDialog(); //上部に表示する説明テキストを指定する fbd.Description = "フォルダを指定してください。"; //ルートフォルダを指定する //デフォルトでDesktop fbd.RootFolder = Environment.SpecialFolder.Desktop; //最初に選択するフォルダを指定する //RootFolder以下にあるフォルダである必要がある fbd.SelectedPath = @"C:\Windows"; //ユーザーが新しいフォルダを作成できるようにする //デフォルトでTrue fbd.ShowNewFolderButton = true; //ダイアログを表示する if (fbd.ShowDialog(this) == DialogResult.OK) { //選択されたフォルダを表示する Console.WriteLine(fbd.SelectedPath); }
.NET Framework 1.0では次のような方法により、「フォルダの選択」ダイアログの表示が可能になります。
まず、「参照設定」に「System.Design.dll」を追加し、さらに次のようなクラスを作ります。
Public Class BrowseFolder Inherits System.Windows.Forms.Design.FolderNameEditor Dim fb As New System.Windows.Forms.Design.FolderNameEditor.FolderBrowser() Public Function BrowseDialog(ByVal description As String, _ ByVal owner As Form) As String '説明を指定 fb.Description = description 'はじめのフォルダを指定 fb.StartLocation = _ System.Windows.Forms.Design.FolderNameEditor.FolderBrowserFolder.Desktop 'スタイルを指定 fb.Style = _ System.Windows.Forms.Design.FolderNameEditor.FolderBrowserStyles.RestrictToDomain If fb.ShowDialog(owner) = DialogResult.OK Then Return fb.DirectoryPath Else Return String.Empty End If End Function End Class
public class BrowseFolder : System.Windows.Forms.Design.FolderNameEditor { System.Windows.Forms.Design.FolderNameEditor.FolderBrowser fb = new System.Windows.Forms.Design.FolderNameEditor.FolderBrowser(); public string BrowseDialog(string description, Form owner) { //説明を指定 fb.Description = description; //はじめのフォルダを指定 fb.StartLocation = System.Windows.Forms.Design.FolderNameEditor.FolderBrowserFolder.Desktop; //スタイルを指定 fb.Style = System.Windows.Forms.Design.FolderNameEditor.FolderBrowserStyles.RestrictToDomain; if (fb.ShowDialog(owner) == DialogResult.OK) { return fb.DirectoryPath; } else { return string.Empty; } } }
実際に「フォルダの選択」ダイアログを表示するには次のようなコードを書きます。ここではダイアログを表示し、選択されたフォルダのパスをコンソールに表示します。
Dim f As New BrowseFolder() Console.WriteLine(f.BrowseDialog("フォルダを指定してください。", Me))
BrowseFolder f = new BrowseFolder(); Console.WriteLine(f.BrowseDialog("フォルダを指定してください。", this));
ただしこの方法でははじめに表示するフォルダにはStartLocationプロパティに指定できるフォルダ以外のフォルダを指定することは出来ないようです。
さらに、Win32 APIのSHBrowseForFolderを使用した例がマイクロソフトのページにあります。