高效的树列表

时间:2015-03-06 01:47:29

标签: c# tree filesystems explorer

我正在尝试使用树列表中的递归节点功能创建Windows资源管理器。我想知道是否有办法只加载已被点击的信息 - 例如我可以使用

加载所有驱动器
foreach (DriveInfo drive in DriveInfo.GetDrives())
给我一些类似的东西

  • C://

  • d://

  • E://

如果我要从每个驱动器加载所有内容,它会很快变得非常大。所以我想知道是否有一个很好的方法来初始化驱动器,一旦它被放大它只会填充被点击的驱动器。

  • C://
    • Folder1中
    • FOLDER2
    • Folder3
      • 文件1
  • 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默认只使用主驱动器,我将根据我的函数中递归点击动作的路径点击的内容来处理递归。虽然我的结果不一致。我要么根本没有显示任何内容,要么列出了驱动器,但是他们没有回应任何点击操作,我知道我做错了但不确定是什么。

0 个答案:

没有答案