如何根据numericupdown值更改更改treeView1中节点的扩展级别?

时间:2014-12-24 09:48:22

标签: c# .net winforms treeview

我有这个方法:

void ExpandToLevel(TreeNodeCollection nodes, int level)
        {
            if (level > 0)
            {
                foreach (TreeNode node in nodes)
                {
                    node.Expand();
                    ExpandToLevel(node.Nodes, level - 1);
                }
            }
        }

然后在numericupdown1 valuechanged事件中,我正在根据值更改扩展级别。 如果在默认情况下它是1,那么当我在numericupdown中提高vlaue时,这工作正常。 然后我把它提升到2 3 4,我看到treeView1扩展越来越多。 但是,如果我向下移动价值没有任何反应,它将保持在相同的扩展水平。

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            ExpandToLevel(treeView1.Nodes, (int)numericUpDown1.Value);
        }

如果我将numericupdown值更改回来,它将如何实现,它将epxand回到treeView1中的节点级别?

这是我到目前为止所尝试的。 我添加了这个新方法:

void CollapseToLevel(TreeNodeCollection nodes, int level)
        {
            if (level > 0)
            {
                foreach (TreeNode node in nodes)
                {
                    node.Collapse();
                    CollapseToLevel(node.Nodes, level - 1);
                }
            }
        }

然后在numericupdown值更改事件中,我将代码更改为:

decimal oldValue;
        private void numericUpDown1_ValueChanged(object sender, EventArgs e)
        {
            if (numericUpDown1.Value > oldValue)
            {
                ExpandToLevel(treeView1.Nodes, (int)numericUpDown1.Value);
            }
            else
            {
                CollapseToLevel(treeView1.Nodes, (int)numericUpDown1.Value);
            }
            oldValue = numericUpDown1.Value;

        }

当我展开时,将数字提示值更改为高级,将其逐级展开。 但是当我将数值更新值更改回来时,如果我处于值4并且现在更改为值3时,我将其折叠回来,所有节点都会折叠回根目录。

当vlaue为0时,我希望它只能从4到3折叠到2到1,然后折回到root。

崩溃并不顺利。

1 个答案:

答案 0 :(得分:0)

private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
    ExpandOrCollapseToLevel(treeView1.Nodes, (int)numericUpDown1.Value);
}

void ExpandOrCollapseToLevel(TreeNodeCollection nodes, int level)
{
    foreach (TreeNode node in nodes)
    {
        if (level > 0)
            node.Expand();
        else
            node.Collapse();
        ExpandToLevel(node.Nodes, level - 1);
    }
}