树视图搜索结果平面列表

Treeview search results flat list

如何让右侧的列表只填充符合搜索条件的项目?我不一定要文字代码,而只是关于如何操作的一些一般指导。

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

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

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;
        }
    }
}

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

var directoryNode = new TreeNode(directoryInfo.Name);

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

希望这个建议对您有所帮助