DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

フォルダの選択ダイアログを表示する

下図のような「フォルダの選択」ダイアログを表示する方法を紹介します。

.NET Framework 1.1以降

.NET Framework 1.1以降ではFolderBrowserDialogクラスを使用して表示します。まずはこの方法から説明します。

次の例ではルートフォルダをデスクトップ、始めに選択されているフォルダを"C:\Windows"として「フォルダの選択」ダイアログを表示しています。また、ユーザーが新しいフォルダを作成できるように「新しいフォルダ」ボタンが表示されるようにしています。

VB.NET
コードを隠すコードを選択
'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
C#
コードを隠すコードを選択
//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

.NET Framework 1.0では次のような方法により、「フォルダの選択」ダイアログの表示が可能になります。

まず、「参照設定」に「System.Design.dll」を追加し、さらに次のようなクラスを作ります。

VB.NET
コードを隠すコードを選択
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
C#
コードを隠すコードを選択
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;
        }
    }
}

実際に「フォルダの選択」ダイアログを表示するには次のようなコードを書きます。ここではダイアログを表示し、選択されたフォルダのパスをコンソールに表示します。

VB.NET
コードを隠すコードを選択
Dim f As New BrowseFolder()
Console.WriteLine(f.BrowseDialog("フォルダを指定してください。", Me))
C#
コードを隠すコードを選択
BrowseFolder f = new BrowseFolder();
Console.WriteLine(f.BrowseDialog("フォルダを指定してください。", this));

ただしこの方法でははじめに表示するフォルダにはStartLocationプロパティに指定できるフォルダ以外のフォルダを指定することは出来ないようです。

Win32 APIのSHBrowseForFolderによる方法

さらに、Win32 APIのSHBrowseForFolderを使用した例がマイクロソフトのページにあります。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • 「???を参照に追加します」の意味が分からないという方は、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。