考虑一个拥有许多节点的TreeView,这样在视口中并不是所有节点都可见。你必须滚动才能看到更多。
我正在寻找一些属性,它可以通过向上/向下滚动显示所有可以显示的节点,即所有未隐藏在折叠父级内的节点,无论它们是否在视口中看到时刻。
我知道IsVisible,它为我提供了一个TreeNode现在是否在视图中可见的信息。但是对于我必须滚动查看的节点,该属性将返回false。
是否有合适的财产或其他方式来做这件事?
编辑: 我正在使用Winforms
答案 0 :(得分:0)
听起来你想要所有顶级节点以及扩展其父节点的任何子节点。
以下是使用递归函数的快速实现:
public IEnumerable<TreeNode> GetVisibleNodes(TreeView view)
{
List<TreeNode> nodes = new List<TreeNode>();
foreach (TreeNode node in view.Nodes)
{
nodes.AddRange(TraverseNode(node));
}
return nodes;
}
private IEnumerable<TreeNode> TraverseNode(TreeNode node)
{
List<TreeNode> visibleNodes = new List<TreeNode>();
visibleNodes.Add(node);
if (node.IsExpanded)
{
foreach (TreeNode childNode in node.Nodes)
{
visibleNodes.AddRange(TraverseNode(childNode));
}
}
return visibleNodes;
}
用法:
var nodes = GetVisibleNodes(someTreeView);
答案 1 :(得分:0)
这是我最终做的事情。出于性能原因,visibleNodes在方法外声明。我将这个方法称为根节点作为参数。
private void GetVisibleNodes(TreeNode node)
{
visibleNodes.Add(node);
if (node.IsExpanded)
{
foreach (TreeNode childNode in node.Nodes)
{
GetVisibleNodes(childNode);
}
}
}