下面是用于显示,仅在第一次显示驱动器树的代码,添加到树作为用户点击节点。此代码不会显示空的驱动器。添加图标到每个节点留给学生练习:
private static string PLACEHOLDER = "...";
private void ListDrives()
{
string[] drives = Environment.GetLogicalDrives();
foreach (string drive in drives)
{
if (Directory.Exists(drive))
{
TreeNode node = new TreeNode(drive);
node.Tag = drive;
this.treeViewFolders.Nodes.Add(node);
node.Nodes.Add(new TreeNode(PLACEHOLDER));
}
}
this.treeViewFolders.BeforeExpand += new TreeViewCancelEventHandler(treeView_BeforeExpand);
}
void treeView_BeforeExpand(object sender, TreeViewCancelEventArgs e)
{
if (e.Node.Nodes.Count > 0)
{
if (e.Node.Nodes[0].Text == PLACEHOLDER)
{
e.Node.Nodes.Clear();
string[] dirs = Directory.GetDirectories(e.Node.Tag.ToString());
foreach (string dir in dirs)
{
DirectoryInfo di = new DirectoryInfo(dir);
TreeNode node = new TreeNode(di.Name);
node.Tag = dir;
try
{
if (di.GetDirectories().GetLength(0) > 0)
node.Nodes.Add(null, PLACEHOLDER);
}
catch (UnauthorizedAccessException)
{
// TODO: update node images
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "ExplorerForm", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
finally
{
e.Node.Nodes.Add(node);
}
}
}
}
}
你在找这样的吗? http://www.dreamincode.net/code/snippet2591.htm您将不得不修改您现有的代码以递归访问每个驱动器 – WorldIsRound 2011-03-16 22:19:43
您的代码甚至不尝试挖掘子目录。路易斯告诉你如何,但要小心,这可能需要很长的时间。 – 2011-03-16 22:58:25