【问题标题】:Getting all visible Nodes from Infragistics UltraTree从 Infragistics UltraTree 获取所有可见节点
【发布时间】:2018-05-30 11:21:49
【问题描述】:

我有 1 个根节点和该根节点的许多子节点。

我想获取所有可见节点键。

如下递归代码块;

public void PrintNodesRecursive(UltraTreeNode oParentNode)
{  
    foreach (UltraTreeNode oSubNode in ultraTree1.Nodes[0].Nodes)
    {
        MessageBox.Show(oSubNode.Key.ToString());
        PrintNodesRecursive(oSubNode);
    }             
}

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

但是消息框总是显示“1”值。这不算数,会发生无限循环。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# winforms infragistics ultratree


    【解决方案1】:

    这样试试;

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

    另外,将visible 条件放入循环中。

    【讨论】:

    • 不需要额外的长度检查。 foreach 在空集合上无论如何都是无操作的。
    • 你是对的,我把这个逻辑放在了提供更好的理解上。
    • 谢谢,这也有效。但是它向我展示了所有节点/子节点,而不仅仅是可见的。我们能做些什么呢?
    • 我将“oSubNode.Visible”逻辑放入循环中。
    • @Rainman 是的,我试过了。但是,仍然得到所有节点。
    【解决方案2】:

    您犯了一个简单的编程错误。这一行:

    foreach (UltraTreeNode oSubNode in ultraTree1.Nodes[0].Nodes)
    

    应该是

    foreach (UltraTreeNode oSubNode in oParentNode.Nodes)
    

    否则,每个递归步骤都会从顶部重新开始。

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多