在TreeView中获取所有可见节点

时间:2017-12-16 14:08:23

标签: c# .net winforms 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]);
}

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

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

1 个答案:

答案 0 :(得分:1)

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

TreeView

另外,您可以依靠Descendants扩展方法展开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; } } 然后使用TreeView属性,获取所有可见节点。