如何使列表中的列表仅填充符合搜索条件的项目?我不是必须要求文字代码,而只是关于如何这样做的一般指导。
我已经编写了代码,用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;
}
}
}
答案 0 :(得分:1)
创建一个应该是表单全局的父节点。这样您就可以使用父节点而无需每次都搜索硬盘上的目录(文件夹)。让我们说
var directoryNode = new TreeNode(directoryInfo.Name);
并将所有后续节点添加到directoryNode,因为您的代码已经执行此操作。最后,您将获得添加到directoryNode的整体结构。将此directoryNode添加到树视图中。您的树视图将被填充。当用户提供搜索参数时,在directoryNode中搜索不在实际目录中,在内存中搜索速度快,然后搜索硬盘上的目录,并创建节点列表并分配给树视图。当用户删除搜索参数时,再次分配directoryNode。
希望这个建议有所帮助