我有这个方法:
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。
崩溃并不顺利。
答案 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);
}
}