質問者
エクスプローラ風のTreeViewの作り方

質問
すべての返信
-
全部ではありません。
コードからのノードの追加、削除 ディレクトリの取得方法は、だいたい理解しているつもり? です。
現在、実験的に作成しているのは、ルートに特定のフォルダを登録し、
その子ノードのサブフォルダをぶら下げていき、
選択されたノードのAfterSelectイベントの引数eを使いe.Node.FullPathで、
フォルダまでのフルパスを取得しそのフォルダにあるファイルを取得するという単純なものです。
私がやりたいのは、エクスプローラのような
一番上(ルートノード)にデスクトップがあり、その下にマイドキュメント、マイコンピュータ、マイネットワーク等が、
ぶら下がっているやつです。
この場合、ルートノードにデスクトップがありこの方法が使えません。
根本的に方法が違うのでしょうか?
ここで回答されている方から見れば、素人同然です。
以上です。よろしくお願いします。
-
デスクトップや、マイコンピュータなどは、仮想フォルダと呼ばれる、オブジェクトです(実体があるものもありますが通常はありません)。
これらを扱う場合は、通常のパス情報ではなく(C:\Windowsなどではなく)、IShellFolder オブジェクトと、ITEMIDLIST という可変長構造体配列を扱う必要があります。
さらに、ツリーにして常時表示とする場合は、これらの操作に加えて、フォルダの増減や、ドライブの増減などにも対応する必要があります。
これらの機能の殆どは、残念ながら現在の .NET Framework 上では用意されていないため、必要に応じて Unmanaged な世界で操作するということになります。
さらに、GetSpecialFolder では、物理パスを持つものの一部しか取得できないため、マイコンピュータなどは取り出せません。
ちなみに、マイコンピュータにアクセスしたい場合は、SHGetSpecialFolderLoation という APIを使います。
-
なんだか難しそうですね。今の私ではとても無理みたいです。
とりあえず、http://www.sysinternals.com でレジストリ モニタリングツール REGMONを
入手しました。
これから詳しいサイトをいろいろ調べて、こつこつとやって行きたいと思います。
ありがとうございました。
-
一発、とまではいかないのですが、シェルインタフェースを使うことで比較的容易にエクスプローラと同じTreeViewを実装できます。以下のサイトにC#で実装した例があるので参考にしてみてください。
http://www.codeproject.com/cs/miscctrl/ExplorerTreeView.asp
コンポーネント化されているので、再利用するだけならVBでも簡単に使えると思います。