using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using Microsoft.VisualBasic.FileIO;
namespace FileExplorer_TreeView
{
/* Class :FileExplorer
* Author : Chandana Subasinghe
* Date : 10/03/2006
* Discription : This class use to create the tree view and load
* directories and files in to the tree
*
* Michael van Strien - 16 March 2010 * Slight modifications were made to change this into a standalone control
*/
class FileExplorer : TreeView
{
public FileExplorer()
{
this.BeforeExpand += customBeforeExpand;
CreateTree(this);
}
/* Method :CreateTree
* Author : Chandana Subasinghe
* Date : 10/03/2006
* Discription : This is use to creat and build the tree
*
*/
public bool CreateTree(TreeView treeView)
{
bool returnValue = false;
try {
// Create Desktop
TreeNode desktop = new TreeNode();
desktop.Text = "Desktop";
desktop.Tag = "Desktop";
desktop.Nodes.Add("");
treeView.Nodes.Add(desktop);
// Get driveInfo
foreach (DriveInfo drv in DriveInfo.GetDrives())
{
TreeNode fChild = new TreeNode();
if (drv.DriveType == DriveType.CDRom)
{
fChild.ImageIndex = 1;
fChild.SelectedImageIndex = 1;
}
else if (drv.DriveType == DriveType.Fixed)
{
fChild.ImageIndex = 0;
fChild.SelectedImageIndex = 0;
}
fChild.Text = drv.Name;
fChild.Nodes.Add("");
treeView.Nodes.Add(fChild);
returnValue = true;
}
}
catch (Exception ex)
{
returnValue = false;
}
return returnValue;
}
/* Method :EnumerateDirectory
* Author : Chandana Subasinghe
* Date : 10/03/2006
* Discription : This is use to Enumerate directories and files
*
*/
public TreeNode EnumerateDirectory(TreeNode parentNode)
{
try {
DirectoryInfo rootDir;
// To fill Desktop
Char [] arr={'\\'};
string [] nameList=parentNode.FullPath.Split(arr);
string path = "";
if (nameList.GetValue(0).ToString() == "Desktop")
{
path = SpecialDirectories.Desktop+"\\";
for (int i = 1; i < nameList.Length; i++)
{
path = path + nameList[i] + "\\";
}
rootDir = new DirectoryInfo(path);
}
// for other Directories
else {
rootDir = new DirectoryInfo(parentNode.FullPath + "\\");
}
parentNode.Nodes[0].Remove();
foreach (DirectoryInfo dir in rootDir.GetDirectories())
{
TreeNode node = new TreeNode();
node.Text = dir.Name;
node.Nodes.Add("");
parentNode.Nodes.Add(node);
}
//Fill files
foreach (FileInfo file in rootDir.GetFiles())
{
TreeNode node = new TreeNode();
node.Text = file.Name;
node.ImageIndex = 2;
node.SelectedImageIndex = 2;
parentNode.Nodes.Add(node);
}
}
catch (Exception ex)
{
//TODO :
}
return parentNode;
}
private void customBeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Nodes[0].Text == "")
{
TreeNode node = this.EnumerateDirectory(e.Node);
}
//TreeView::BeforeExpand();
}
}
}