Treeview搜索结果平面列表

时间:2015-06-19 20:04:23

标签: c# search treeview

如何使列表中的列表仅填充符合搜索条件的项目?我不是必须要求文字代码,而只是关于如何这样做的一般指导。

我已经编写了代码,用C#填充左侧列表,提供一个目录来填充列表。在使用顶部的搜索字段时,我还不清楚如何正确填充列表。

我是否应该根据搜索条件调用另一个根据文件目录研究的函数?或者将初始文件列表存储在变量中并在其中搜索以填充列表?

enter image description here

using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace directoryBrowser
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            ListDirectory(treeView1, @"C:\Windows");
        }

        public void ListDirectory(TreeView treeView, string path)
        {
            treeView.Nodes.Clear();
            var rootDirectoryInfo = new DirectoryInfo(path);
            treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo));
        }

        public static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
        {
                var directoryNode = new TreeNode(directoryInfo.Name);

                foreach (var directory in directoryInfo.GetDirectories())
                {
                     try
                     {
                          directoryNode.Nodes.Add(CreateDirectoryNode(directory));
                     } catch {
                          // cannot access directory
                     }
                }
                foreach (var file in directoryInfo.GetFiles())
                {
                    directoryNode.Nodes.Add(new TreeNode(file.Name));
                }
                return directoryNode;
        }
    }
}

1 个答案:

答案 0 :(得分:1)

创建一个应该是表单全局的父节点。这样您就可以使用父节点而无需每次都搜索硬盘上的目录(文件夹)。让我们说

var directoryNode = new TreeNode(directoryInfo.Name);

并将所有后续节点添加到directoryNode,因为您的代码已经执行此操作。最后,您将获得添加到directoryNode的整体结构。将此directoryNode添加到树视图中。您的树视图将被填充。当用户提供搜索参数时,在directoryNode中搜索不在实际目录中,在内存中搜索速度快,然后搜索硬盘上的目录,并创建节点列表并分配给树视图。当用户删除搜索参数时,再次分配directoryNode。

希望这个建议有所帮助