在TreeView中获取所有可见节点

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在TreeView中获取所有可见节点相关的知识,希望对你有一定的参考价值。

我想在树视图上“仅在视图中”获取节点的键。

这是一个例子;

enter image description here

我使用下面的代码递归地获取所有节点。它只是按预期返回所有节点键。但是我只需要在树视图中获取密钥;

public void PrintNodesRecursive(UltraTreeNode oParentNode)
{
    if (oParentNode.Nodes.Count == 0)
    {
        return;
    }
    foreach (UltraTreeNode oSubNode in oParentNode.Nodes)
    {
        MessageBox.Show(oSubNode.Key.ToString());
        PrintNodesRecursive(oSubNode);
    }
}

private void ultraButton3_Click(object sender, EventArgs e)
{
    PrintNodesRecursive(ultraTree1.Nodes[0]);
}

我不知道我应该遵循不同的路径或只是重新组织代码。

我好几个小时后才堆积。需要你的帮助。

答案

您可以使用NodesIsVisible集合和Node属性找到第一个可见节点。然后创建一个递归方法,使用NextVisibleNode查找TreeView中的下一个可见节点。

private void button1_Click(object sender, EventArgs e)
{
    var visibleNodes = GetVisibleNodes(treeView1).ToList();
}
public IEnumerable<TreeNode> GetVisibleNodes(TreeView t)
{
    var node = t.Nodes.Cast<TreeNode>().Where(x => x.IsVisible).FirstOrDefault();
    while (node != null)
    {
        var temp = node;
        node = node.NextVisibleNode;
        yield return temp;
    }
}

另外作为另一种选择,你可以依靠Descendants扩展方法来展平TreeView,然后使用IsVisible属性,获取所有可见节点。

以上是关于在TreeView中获取所有可见节点的主要内容,如果未能解决你的问题,请参考以下文章

wpf中选中treeview的某个子节点后获取子节点所在的所有父节点的内容用于数据库查询

C#中如何设置treeview每个节点背景图片及背景颜色

怎么让所有子节点被选中,父节点自动选中 TreeView

bootstrap-treeview如何获取选中节点的值呢

关于c#中treeview节点的收缩与展开(.net web)

如何在TreeView中选中他的节点时,更改节点的背景颜色?