在使用文件路径列表填充 TreeView 时避免根节点
Avoiding root Node in Populating TreeView with a List of File Paths
public static TreeNode MakeTreeFromPaths(List<string> paths, string rootNodeName = "E:\", char separator = '\')
{
var rootNode = new TreeNode(rootNodeName);
foreach (var path in paths.Where(x => !string.IsNullOrEmpty(x.Trim())))
{
var currentNode = rootNode;
var pathItems = path.Split(separator);
foreach (var item in pathItems)
{
var tmp = currentNode.Nodes.Cast<TreeNode>().Where(x => x.Text.Equals(item));
currentNode = tmp.Count() > 0 ? tmp.Single() : currentNode.Nodes.Add(item);
}
}
return rootNode;
}
此函数可以使用给定的文件路径列表填充树视图。但是有一个问题,它会创建一个名为rootNodeName 的根节点,然后添加其他子节点。如何避免给定的 rootNodeName?我不需要使用此功能创建的任何额外的根节点。
我假设您在某个时刻将 TreeNode 放入 TreeView,如下所示:
treeView.Nodes.Add(MakeTreeFromPaths(pathList));
您可以添加其所有子节点,而不是添加该根节点,如下所示:
foreach(var node in MakeTreeFromPaths(pathList).Nodes)
{
treeView.Nodes.Add(node);
}
虽然这不是很漂亮。如果您将 TreeView 作为参数并直接填充它,或者如果您 return 一个节点列表,那就更好了。
public static TreeNode MakeTreeFromPaths(List<string> paths, string rootNodeName = "E:\", char separator = '\')
{
var rootNode = new TreeNode(rootNodeName);
foreach (var path in paths.Where(x => !string.IsNullOrEmpty(x.Trim())))
{
var currentNode = rootNode;
var pathItems = path.Split(separator);
foreach (var item in pathItems)
{
var tmp = currentNode.Nodes.Cast<TreeNode>().Where(x => x.Text.Equals(item));
currentNode = tmp.Count() > 0 ? tmp.Single() : currentNode.Nodes.Add(item);
}
}
return rootNode;
}
此函数可以使用给定的文件路径列表填充树视图。但是有一个问题,它会创建一个名为rootNodeName 的根节点,然后添加其他子节点。如何避免给定的 rootNodeName?我不需要使用此功能创建的任何额外的根节点。
我假设您在某个时刻将 TreeNode 放入 TreeView,如下所示:
treeView.Nodes.Add(MakeTreeFromPaths(pathList));
您可以添加其所有子节点,而不是添加该根节点,如下所示:
foreach(var node in MakeTreeFromPaths(pathList).Nodes)
{
treeView.Nodes.Add(node);
}
虽然这不是很漂亮。如果您将 TreeView 作为参数并直接填充它,或者如果您 return 一个节点列表,那就更好了。