1

我有 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”值。它不算数,会发生无限循环。

我怎样才能让它发生?

4

2 回答 2

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条件放入循环中。

于 2017-12-16T13:20:16.723 回答
1

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

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

应该是

foreach (UltraTreeNode oSubNode in oParentNode.Nodes)

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

于 2017-12-16T13:21:15.873 回答