ソフト関連Trial−No.106
        自作FolderBrowserDialogコントロールの紹介

トップページへ

 自作に至る経緯

簡易音楽プレーヤーソフト「CKMusicPlayer」 の制作で、FolderBrowserDialogコントロール(以下、「FBDコントロール」と略)を使用したところ、気になる現象が発生しました。
FBDコントロールの仕様では、そのSelectedPathプロパティにフォルダー名を指定してこのコントロールを呼び出すと、 指定されたフォルダーの位置までスクロールされて初期表示が行われるようになっています。
「CKMusicPlayer」ではFBDコントロールのこの機能を使って、前回使用したフォルダー(「CKMusicPlayer」では、 アルバム名に対応している)を見つけやすくしようとしました。
このコントロールを「CKMusicPlayer」に実装して作成したソフトウエアをテストしたところ、テスト環境のOSがWindows XPかWindows Vistaの場合には 仕様通りの初期表示結果が得られましたが、OSがWindows 7 の場合には指定されたフォルダー位置までのスクロールができませんでした。

以下に、作者のパソコンの「(ドライブ):\CD\Pops\由紀さおり_夜明けのスキャット」というフォルダーをSelectedPathに指定した場合の、 各OSでのFBDコントロールの初期表示結果を示します。

OSがWindows XPの場合(ドライブは外付けHDDのGドライブ)
   

OSがWindows Vistaの場合(ドライブは外付けHDDの I ドライブ)
   

OSがWindows 7の場合(ドライブは外付けHDDのGドライブ)
   

このようなOSによる動作の違いについてGoogleで検索をしてみたところ、作者と同じ経験をした人の以下のようなスレッド情報が見つかり、 両者とも2012年1月時点で未解決になっていました。
http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/e555bf10-3e7b-4c27-a0ee-da7886899b30
http://stackoverflow.com/questions/6942150/why-folderbrowserdialog-dialog-does-not-scroll-to-selected-folder

なお、FBDコントロールにはRootFolderというプロパティもあって、これもFBDコントロールの初期表示位置に関係するような記述が上記スレッド情報にありましたので、 作者もMicrosoft社のサイトの情報を参考にしながらいろいろと試してみましたが、結果の改善には至りませんでした。

「CKMusicPlayer」のように、多くのフォルダーの中から必要なものを選択する操作を伴うソフトウエアでは、 Windows 7のOSで起こるこのような挙動は、ユーザーにとって unfriendly なものになります。
そこで、指定したフォルダーがWindows 7のOSでも適切に初期表示できるFBDコントロールを自作することにしました。

 FBDコントロールの自作

「CKMusicPlayer」はVisual C#を使って作成していたので、FBDコントロールの自作もC#言語で行うことにしました。
C#言語を使ってのFBDコントロールの作成に関しては、以下の宇宙仮面さんのサイトにまとめられているので、 TreeView と ImageList を使うという基本手法・構成をほとんどそのまま利用させていただいて、自作を進めました。
http://uchukamen.com/Programming1/DirTree/index.htm
http://uchukamen.com/Programming1/TreeViewByDk/index.htm
宇宙仮面さんには、この場を借りて、お礼を申し上げます。

作成したコントロールは、Windows Formの形で「CKMusicPlayer」に実装しました。
実装したものを Windows 7 の環境下でテストしたところ、以下のような良好な初期表示状態が確認できました。
   

なお、この自作コントロ−ルには次項に記載するような問題点があるため、
実際の「CKMusicPlayer」では、使用するOSがWindows XP か Windows Vista の場合には標準のFBDコントロールを使い、 OSが Windows 7 の場合には既定では自作のFBDコントロールを使い、標準のFBDコントロールも選択できるように実装しました。

この自作コントロ−ルを「CKFolderDialog」というクラスライブラリにして、 Visual C#のプロジェクトファイルの形で下記リンクからダウンロードできるようにしました。

 自作FBDコントロールの問題点と改良の試み

前項のように作成したFBDコントロールには、以下のフォルダーが取得できないという問題点があります。
  1.ネットワーク環境下のフォルダー
  2.本コントロールを実装したソフトを仮想環境OSで使用した場合の、ホストOSのフォルダー
第1の問題では、ネットワークパスをTreeViewに表示する汎用的な手法が見つけられなかったので、当面は未解決状態のままでおくことにしました。
第2の問題では、ホストOSのドライブが、ドライブレターの前に「\\tsclient」を付けて、 例えばホストOSのCドライブは「\\tsclient\C\」と表わされるようなので、これを手がかりにして自作品を改良してみました。
この改良品を「CKMusicPlayer」に実装してテスト用ソフトを作成し、 これをWindows XP Modeの仮想環境下にインストールしてホストOS(Windows 7)のフォルダーを見たところ、 ドライブレターの付いたドライブ配下のフォルダーであれば取得できることが確認できました。
しかし、この改良品実装ソフトでは、改良コントロールの表示に時間がかかるケースがしばしば発生したため、 改良品の「CKMusicPlayer」への実装は断念しました。

この改良品についても、「CKFolderDialogH」というクラスライブラリにして、Visual C# のプロジェクトファイルの形で下記リンクからダウンロードできるようにしました。

 ダウンロード

「CKFolderDialog」
「CKFolderDialogH」
いずれのプロジェクトファイルとも、Visual C# 2008(.NET Framework 2.0)で作成したものです。

 公開情報の利用に関するご注意

当ページで公開した内容の利用は、全て利用される方の責任で行っていただきます。
作者は十分な注意を払って本ページを作成していますが、もし万一、本ページとダウンロードファイルの内容に誤りがあっても、 また、ご使用になるパソコンに問題が発生しても、作者は責任を負いません。

 ご質問・ご意見・ご感想

ご質問、ご意見、ご感想、バグ等のご連絡は、 こちらへ

トップページへ