【问题标题】:Getting all visible Nodes in a TreeView获取 TreeView 中的所有可见节点
【发布时间】:2017-12-16 14:08:23
【问题描述】:

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

这是一个例子;

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

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]);
}

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

我只是在几个小时后堆积起来。需要你的帮助。

【问题讨论】:

  • 你试过Treenode的.IsExpanded.IsVisible.NextVisibleNode.PrevVisibleNode属性吗? (如果我正确理解了这个问题)。
  • @Jimi 嘿,是的,我尝试了下一个可见节点,它运行良好,但我没有进入 for 循环。如何以编程方式使用下一个可见节点获取所有节点?

标签: c# .net winforms treeview


【解决方案1】:

您可以使用Nodes 集合和NodeIsVisible 属性找到第一个可见节点。然后创建一个递归方法,使用NextVisibleNodeTreeView 中查找下一个可见节点。

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 属性,获取所有可见节点。

【讨论】:

  • 谢谢。你让我今天一整天都感觉很好。我想在不久的将来像你一样,先生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
相关资源
最近更新 更多