我正在尝试使用树列表中的递归节点功能创建Windows资源管理器。我想知道是否有办法只加载已被点击的信息 - 例如我可以使用
加载所有驱动器foreach (DriveInfo drive in DriveInfo.GetDrives())
给我一些类似的东西
C://
d://
E://
如果我要从每个驱动器加载所有内容,它会很快变得非常大。所以我想知道是否有一个很好的方法来初始化驱动器,一旦它被放大它只会填充被点击的驱动器。
d://
E://
我想我只是想知道这是否可行,或者我是否应该不担心性能并从一开始就填充整个树。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace CST238___Justin_OBrien___Assign_3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void folderTree_AfterSelect(object sender, TreeViewEventArgs e)
{
populateTree(folderTree, somePath); //help here please =D
}
private void Form1_Load(object sender, EventArgs e)
{
currDirPath.Text = "current directory";
foreach (DriveInfo drive in DriveInfo.GetDrives())
{
folderTree.Nodes.Add(new TreeNode(drive.Name)); //initialize
}
}
private void populateTree(TreeView tree, string path)
{
tree.Nodes.Clear();
var path1 = new DirectoryInfo( path );
tree.Nodes.Add(dirNode( path1 ));
}
private static TreeNode dirNode(DirectoryInfo di)
{
var dNode = new TreeNode(di.Name);
foreach( var subfolder in di.GetDirectories())
{
dNode.Nodes.Add(dirNode( subfolder ));
}
foreach( var file in di.GetFiles() )
{
dNode.Nodes.Add(new TreeNode(file.Name));
}
return dNode;
}
}
}
所以这就是我到目前为止所做的,我决定使用我早期谈到的foreach默认只使用主驱动器,我将根据我的函数中递归点击动作的路径点击的内容来处理递归。虽然我的结果不一致。我要么根本没有显示任何内容,要么列出了驱动器,但是他们没有回应任何点击操作,我知道我做错了但不确定是什么。