Introduction
This tree view control gives you the ability to control which drive types are displayed to let the user choose directories. A possible scenario is to show only local drives, because your application scans the selected directories and fills a database with the generated meta data, and it makes no sense to allow directories from removable drives.
Design
Introduction
This release has a new design which is based on a tree view which aggregates a tree view data provider interface (Strategy pattern). The goal of the new design is to provide an easy way to extend or add data providers without changing a single line of tree view code. Basically, the tree view interface will not change so far, but the data providers will change their behavior and features.
TreeViewFolderBrowser
class defines the following core requirements:
DriveTypes
RootFolder
CheckboxBehaviorMode
and is responsible to manage the checkboxes and the internal selected directories list.
ITreeViewFolderBrowserDataProvider
is used by a TreeViewFolderBrowser
instance and is responsible to
- retrieve the computer drives and directories
Imagelist
which is used to assign images to the nodes created by this instance ContextMenu
and can provide custom features and behavior to extend the TreeViewFolderBrowser
class.
TreeViewFolderBrowser
You can specify the drive types through a public
instance property on the control. The enumeration can be treated as a bit field, that is, a set of flags.
Member Name | Description |
NoRootDirectory | NoRootDirectory |
RemovableDisk | Drive has removable media. This includes all floppy drives and many other varieties of storage devices. |
LocalDisk | Drive has fixed (nonremovable) media. This includes all hard drives, including hard drives that are removable. |
NetworkDrive | Network drives. This includes drives shared anywhere on a network. |
CompactDisc | Drive is a CD-ROM. No distinction is made between read-only and read/write CD-ROM drives. |
RAMDisk | Drive is a block of Random Access Memory (RAM) on the local computer that behaves like a disk drive. |
The different CheckboxBehaviorMode
indicates whether check boxes are displayed next to the tree nodes in the tree view control and how the tree view handle related events. The main difference between SingleChecked
and RecursiveChecked
behavior, lies in the fact that the user can't unselect sub folders of a checked folder in RecursiveChecked
mode.
Member Name | Description |
None | No check boxes are displayed next to the tree nodes in the tree view control. |
SingleChecked | Check boxes are displayed next to the tree nodes in the tree view control. The user can check directories. |
RecursiveChecked | Check boxes are displayed next to the tree nodes in the tree view control. The user can check directories, the subdirectories are checked recursive. |
The root folder property lets you specify where the browsing starts from. Root folder values are defined by System.Environment.SpecialFolder
.
Member Name | Description |
Desktop | The tree view control shows a virtual desktop root node. Personal node points to the user my files folder. The MyComputer node shows the specified drive types. |
MyComputer | The tree view control shows the specified drive types on the root. |
All other values from System.Environment.SpecialFolder | The tree view control shows the specified root folder, the drive types are ignored. |
The combination of DriveType
, CheckboxBehaviorModes
and SpecialFolder
enumeration values gives you the ability to control how the tree view display its content and behaves when you select a directory.
DataProvider
Data providers are the workers behind the TreeViewFolderBrowser
which controls them. By implementing the ITreeViewFolderBrowserDataProvider
interface, you will have full control over the core processes like retrieving data, assign images to the nodes and provide custom ContextMenu
items for each node. But you don't have to care about checkboxes, load on demand, find node at position if the user requests the ContextMenu
, you will be hooked if it's time to take some action on it. The only thing you must respect is the core functionality (DriveTypes
and RootFolder
) implemented by the TreeViewFolderBrowser
.
To provide clean access to the handled TreeViewFolderBrowser
class instance, every method on the data provider interface provides an TreeViewFolderBrowserHelper
class instance which lets you create nodes and give you access to the TreeViewFolderBrowser
instance.
Please take a look at the two delivered standard implementations which can be found in the Raccoom.TreeViewFolderBrowser.DataProviders
project.
Key Features
TreeViewFolderBrowser
- Different build in
CheckboxBehaviorModes
. - Step by step population for subdirectories.
- Parent nodes are bold if there are selected subfolders, this helps to find selected directories in large structures.
TreeViewFolderBrowserDataProvider
- Drive enumeration through strong typed
Win32_Logicaldisk
WMI class. - Shell32
ImageList
used to retrieve Icons. System.IO namespace
used to retrieve directories - Respects the code access security features from .NET
TreeViewFolderBrowserDataProviderShell32
Inherit from TreeViewFolderBrowserDataProvider
- Drive and directory enumeration through Shell32 interop against strong typed
Win32_Logicaldisk
WMI class drive types. (Does not respect .NET code access security.) - Supports Shell32 virtual folders (non file system folders)
- Shell32
ImageList
used to retrieve Icons. - Functional context menu items for each shell object.
- Tested against WinXP and Win2000.
Using the Code
Before you begin, make sure your project has a valid reference to the Raccoom.TreeViewFolderBrowser.dll. Go to the Toolbox window, right-click and select Customize Toolbox from the context menu. In the Customize Toolbox dialog, go to the .NET Framework Components tab and select the Raccoom.TreeViewFolderBrowser.dll assembly that you just compiled. Now drop the TreeViewFolderBrowser
control to your form.
This example assumes that you have created an instance of a TreeViewFolderBrowser
control on a Form.
Fill Data
this.myTreeView.DataSource =
new Raccoom.Windows.Forms.TreeViewFolderBrowserDataProvider();
this.myTreeView.DriveTypes
= DriveTypes.LocalDisk | DriveTypes.NetworkDrive |
DriveTypes.RemovableDisk |
DriveTypes.CompactDisc;
this.myTreeView.CheckboxBehaviorMode= CheckboxBehaviorMode.SingleChecked;
this.myTreeView.Populate();
Event Handling
private void treeView_SelectedDirectoriesChanged(
object sender, Raccoom.Windows.Forms.SelectedDirectoriesChangedEventArgse)
{
this.statusBar1.Text = e.Path + " is now " + e.CheckState.ToString();
this.listBox1.Items.Clear();
foreach(string s in myTreeView.SelectedDirectories)
{
this.listBox1.Items.Add(s);
}
}
Remarks
This control displays drive types and folders, so far so good. Removable disks can change their medium and folders can change (new folder, delete folder) during run time, the control does not care about that.
Links
History
- 03.30.2015 Github source repository added
- 04.03.2004 Major design changes
- 08.02.2004 Major update
- 02.07.2003 Final release
Enjoy...