.NET TIPS

[フォルダの参照]ダイアログを使用するには?

デジタルアドバンテージ
2003/08/22

 Windowsには、ユーザーにフォルダを選択させるための次の図のような[フォルダの参照]ダイアログが用意されている。これはコモン・ダイアログ・ボックスの1つである。

[フォルダの参照]ダイアログ
このダイアログ・ボックスではユーザーにフォルダを選択させることができる。画面はWindows XPのもの。Windows 2000ではデザインが少し異なる。

 .NET Framework 1.1では、この[フォルダの参照]ダイアログの利用が正式にサポートされた。これにはFolderBrowserDialogクラス(System.Windows.Forms名前空間)を使用する*1

 使い方は簡単で、基本的にはFolderBrowserDialogクラスのインスタンスを作成し、ShowDialogメソッドを呼び出せばよい。

FolderBrowserDialog fbd = new FolderBrowserDialog();
DialogResult dr = fbd.ShowDialog();

 ShowDialogメソッドの戻り値はDialogResult列挙体(System.Windows.Forms名前空間)の値で、クリックされたボタンによりDialogResult.OKかDialogResult.Cancelとなる。[OK]ボタンがクリックされた場合には、実際に選択されたフォルダのフルパスをSelectedPathプロパティから取得することができる。またDescriptionプロパティには、あらかじめダイアログ・ボックス上部に表示されるメッセージを設定することができる。

 次のサンプル・プログラムは、冒頭で示した[フォルダの参照]ダイアログを表示し、選択されたフォルダを画面に表示する。通常はWindowsアプリケーションで使用されるものだが、このようにコンソール・アプリケーションからも利用できる。

// folderdlg1.cs

using System;
using System.Windows.Forms;

public class FolderBrowserDialog1 {
  static void Main() {

    FolderBrowserDialog fbd = new FolderBrowserDialog();

    fbd.Description = "説明テキストがここに表示されます。";

    DialogResult dr = fbd.ShowDialog();

    if (dr == DialogResult.OK) {
      Console.WriteLine(fbd.SelectedPath);
      // 出力例:C:\Documents and Settings\taka-e\デスクトップ
    }
  }
}

// コンパイル方法:csc folderdlg1.cs
[フォルダの参照]ダイアログを表示するC#のサンプル・プログラム(folderdlg1.cs)

より詳細な設定

 上記のサンプル・プログラムでは、説明テキスト以外すべてデフォルトの設定を利用しているが、あらかじめ各種プロパティを設定することにより、表示される項目を変更することができる。

 まず、RootFolderプロパティではツリー表示されるルート部分のフォルダを設定できる。ここには次のようにEnvironment.SpecialFolder列挙体(System名前空間)の値を1つ設定する。この列挙体については「TIPS:Windowsのシステム・フォルダのパスを取得するには?」で解説しているので参照していただきたい。

fbd.RootFolder = Environment.SpecialFolder.MyComputer;

 デフォルトの値はEnvironment.SpecialFolder.Desktop(デスクトップ・フォルダ)である。ここには文字列で任意のディレクトリを指定することはできない。これは内部で呼び出しているWin32 APIであるSHBrowseForFolder関数の仕様によるものだ。

 SelectedPathプロパティは、選択されたフォルダのフルパスを得るためのものだが、あらかじめディレクトリのフルパスを設定しておけば、ツリーが展開され、そのフォルダが選択された状態でダイアログ・ボックスが表示される。

 また、ShowNewFolderButtonプロパティをfalseに設定することにより、画面下部に表示される[新しいフォルダの作成]ボタンを非表示にできる。

 次のサンプル・プログラムはこれらのプロパティを設定して[フォルダの参照]ダイアログを表示する。

// folderdlg2.cs

using System;
using System.Windows.Forms;

public class FolderBrowserDialog2 {
  static void Main() {

    FolderBrowserDialog fbd = new FolderBrowserDialog();

    fbd.Description = "マイ・コンピュータ以下から選択"
                    + "\n-[新しいフォルダ]ボタン非表示"
                    + "\n- 開始フォルダはc:\\Inetpub\\wwwroot";

    fbd.RootFolder = Environment.SpecialFolder.MyComputer;
    fbd.SelectedPath = @"c:\inetpub\wwwroot";
    fbd.ShowNewFolderButton = false;

    DialogResult dr = fbd.ShowDialog();

    if (dr == DialogResult.OK) {
      Console.WriteLine(fbd.SelectedPath);
    }
  }
}

// コンパイル方法:csc folderdlg2.cs
各プロパティを設定した[フォルダの参照]ダイアログを表示するC#のサンプル・プログラム(folderdlg2.cs)

 このサンプル・プログラムを実行すると次のような[フォルダの参照]ダイアログが表示される。

サンプル・プログラムの実行結果
ルートとなるフォルダを「マイ・コンピュータ」に、選択されたフォルダを「c:\Inetpub\wwwroot」に、[新しいフォルダの作成]ボタンを非表示に設定している。

 なお、Windows 2000ではShowNewFolderButtonプロパティをfalseに設定しても[新しいフォルダの作成]ボタンが表示されたままになるようだ。これはクラス・ライブラリのバグだと思われる。End of Article

*1 このクラスは.NET Framework 1.1でのみサポートされる。.NET Framework 1.0には含まれていない。FolderNameEditorクラス(System.Windows.Forms.Design名前空間)の入れ子クラスであるFolderBrowserクラスを利用しても同様に[フォルダの参照]ダイアログを表示することはできるが、リファレンス・マニュアルにもあるように、このクラスは.NET Framework内部での使用を目的とするものであるため、実システムでは使用すべきでないだろう。.NET Framework 1.0でこのダイアログ・ボックスを使いたい場合には、これらのクラスが内部で使用しているWin32 APIであるSHBrowseForFolder関数を呼び出して利用することができる。この方法に関しては「マイクロソフト サポート技術情報 - 306285:[HOW TO] C# を使用して [フォルダの参照] コモン ダイアログ ボックスをラップするマネージ コンポーネントを実装する方法」を参照していただきたい。
 
カテゴリ:Windowsフォーム 処理対象:ダイアログ・ボックス
使用ライブラリ:FolderBrowserDialogクラス(System.Windows.Forms名前空間)
使用ライブラリ:DialogResult列挙体(System.Windows.Forms名前空間)
使用ライブラリ:Environment.SpecialFolder列挙体(System名前空間)
関連TIPS:Windowsのシステム・フォルダのパスを取得するには?
 
この記事と関連性の高い別の.NET TIPS
モーダル・ダイアログやモードレス・ダイアログを表示するには?
[ASP.NET]ページから生成されたソース・コードを見るには?
作業フォルダのパスを取得/設定するには?[C#、VB]
[ASP.NET]DataGridコントロールに選択ボタンを追加するには?
[参照の追加]ダイアログに独自のアセンブリを表示するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

@IT Special

- PR -

TechTargetジャパン

Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

イベントカレンダー

PickUpイベント

- PR -

アクセスランキング

もっと見る

ホワイトペーパーTechTargetジャパン

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH