
Introduction
This is an all-new version of the FolderTreeView control I posted here at
CodeProject some weeks ago. The control now starts in the Desktop namespace, and a new
drilling method has been added so the startup folder can be specified. Please
note that this control is not intended to have all of the functionality of the
actual Windows Explorer TreeView - it is a light-weight control designed for
use in projects where you want to supply a treeview for folder navigation,
without supporting windows shell extensions. If you are looking for a control
that supports shell extensions you should be looking at the excellent
ËxplorerTreeControl submitted by Carlos H Perez here at the
CodeProject website.
How it works
After calling the InitFolderTreeView() method, a dummy Desktop not
is created as the root node, and then the shell's Desktop namespace is iterated
to populate the first level nodes. The child nodes are then iterated, checking
only for the presence of sub-child nodes. If sub-child nodes are found, a dummy
node is inserted so that the [+] will be displayed for folders that can be
expanded. When the BeforeExpand event fires, the folder being
expanded is checked for a dummy node. If a dummy is present, it is removed and
the node's children are re-populated. If the node's children have already been
populated no further action occurs.
Usage
The FolderTreeView control is based on 3 classes:
-
FolderTreeView
- The FolderTreeView implementation
-
ShellOperations
- Supporting Shell Operations
-
ExtractIcons - Shell Icon Extractor
The control naturally derives from the
System.Windows.Forms.TreeView,
exposing 1 new property,
GetSelectedNodePath() which returns the
currently selected node's full path. There are 2 new methods:
InitFolderTreeView()
must be called to populate the TreeView - normally you would call this in your
Form's OnLoad event. The 2nd method is
DrillToFolder(string folderPath)
- this will recurse through the tree looking for the specified folder path,
returning a boolean to indicate if the search was sucessful or not.
The method used to retreive the icon for the Desktop root node works fine, but
is perhaps not the best way to go about it. This control has NOT been tested in
Win9x, NT or 2000 - feedback on these OS's would be much appreciated. Of course
if you improve this control I would appreciate the update, and if you have any
feedback to offer, please post it below.
Updates
Version 1.11:
-
Updated the
GetDesktopIcon()
method so it returns the shell's small desktop icon rather than the large
version
-
Added code so that the Desktop node would return the full desktop folder path
I have now tested the code on Windows Me without problem - feeback on how it
works with other OS's would be appreciated!