C# Winform中TreeView加载文件夹出现重复目录的解决方法
修复C# WinForm TreeView中文件夹重复显示的问题
问题根源
你代码中出现文件夹重复的核心原因是重复创建了同一目录的节点:
- 在
WindowExplorer_Load方法里,你手动创建了Laravel节点并添加到“我的电脑”节点下。 - 紧接着调用
LoadFile(dNode, "D:\\Laravel")时,LoadFile方法检测到路径是目录,又创建了一个同名的Laravel节点并添加到之前的dNode下,最终形成「我的电脑 → Laravel → Laravel」的嵌套结构,视觉上就出现了两次。
修复方案一(推荐):让LoadFile直接创建根目录节点
修改WindowExplorer_Load方法,不再手动创建根节点,直接将“我的电脑”节点作为父节点传入LoadFile,由LoadFile完成根目录节点的创建和子项加载:
private void WindowExplorer_Load(object sender, EventArgs e) { string path = "D:\\Laravel"; // 直接使用"我的电脑"节点作为父节点 LoadFile(fileView.Nodes[0], path); }
原LoadFile方法无需修改,这样LoadFile会自动创建Laravel节点并添加到“我的电脑”下,再递归加载所有子目录和文件,结构正确无重复。
修复方案二:修改LoadFile逻辑,跳过当前目录节点创建
如果你需要保留手动创建根节点的逻辑,可以修改LoadFile方法,让它仅加载指定路径的子项,不再创建当前路径的节点:
public void LoadFile(TreeNode parent, string path) { if (Directory.Exists(path)) { // 移除当前目录节点的创建代码,直接遍历子项 string[] subDir = Directory.GetDirectories(path); string[] subFile = Directory.GetFiles(path); string[] allSubItem = subDir.Concat(subFile).ToArray(); foreach (string subItem in allSubItem) { LoadFile(parent, subItem); } } if (File.Exists(path)) { string fileName = new FileInfo(path).Name; TreeNode fileNode = new TreeNode(fileName); parent.Nodes.Add(fileNode); } }
此时WindowExplorer_Load可以保留原代码,LoadFile会将Laravel的所有子项直接添加到你手动创建的dNode下,不会重复生成目录节点。
内容的提问来源于stack exchange,提问作者Phú Huỳnh Gia
相关产品推荐
相关产品推荐

