我在form1设计器中有一个treeView。 treeView变量名称为:treeViewMS1
当我运行我的程序时,treeView会自动扩展到1级:
现在,如果我点击numericUpDown并将值更改为2,那么:
因此,当我将numericUpDown更改为1时,扩展部分工作正常,扩展后工作正常。
现在当它在第2级时,我将numericUpDown更改回值1而不是第1级,而是回到我的第一个屏幕截图扩展级别1,它回到根级别0.
并且我希望崩溃部分只能向后移动一个级别,但是如果我在扩展的级别2或3或5上它将永远跳到0到根。 p>
这是numericUpDown值已更改事件:
decimal oldValue;
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
if (numericUpDown1.Value > oldValue)
{
ExpandToLevel(treeViewMS1.Nodes, (int)numericUpDown1.Value);
}
else
{
CollapseToLevel(treeViewMS1.Nodes, (int)numericUpDown1.Value);
}
oldValue = numericUpDown1.Value;
}
这是ExpandToLevel方法:
void ExpandToLevel(TreeNodeCollection nodes, int level)
{
if (level > 0)
{
foreach (TreeNode node in nodes)
{
node.Expand();
ExpandToLevel(node.Nodes, level -1);
}
}
}
和CollapseToLevel方法:
void CollapseToLevel(TreeNodeCollection nodes, int level)
{
if (level > 0)
{
foreach (TreeNode node in nodes)
{
node.Collapse();
CollapseToLevel(node.Nodes, level - 1);
}
}
}
如果我处于扩展级别2并且仅将numericUpDown值移动1而不是只折叠一个级别,它会跳转并将其折叠到根目录:
您可以看到numericUpdown值为1,我将其从2移回。 但是treeView位于根节点而不是1级。
我尝试使用常规按钮单击事件添加了一个按钮并调用了CollapseToLevel但结果相同。我想也许numericUpDown存在问题,但扩展工作正常,只有崩溃才能正常工作。
答案 0 :(得分:1)
TreeView.Nodes集合是TreeView中的每个节点。在CollapseToLevel()代码中,您将折叠每个节点,而不检查某个深度或当前节点路径的指示符。因此,当您完成后,您将折叠所有节点,这正是您的图像所描绘的。您需要在此处添加代码以在折叠之前评估节点的深度。
答案 1 :(得分:0)
我这样解决了: 在Form1_Load事件中,我做了:
SetToLevel(treeViewMS1.Nodes, 1);
在我的情况下,我希望它在第1级默认开始。
然后在numericupdown1更改值事件:
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
SetToLevel(treeViewMS1.Nodes, (int)numericUpDown1.Value);
}
然后方法SetToLevel:
void SetToLevel(TreeNodeCollection nodes, int level)
{
foreach (TreeNode node in nodes)
{
node.Collapse(false);
}
ExpandToLevel(nodes, level);
}
最后一个方法是EXpandToLevel:
void ExpandToLevel(TreeNodeCollection nodes, int level)
{
if (level > 0)
{
foreach (TreeNode node in nodes)
{
node.Expand();
ExpandToLevel(node.Nodes, level -1);
}
}
}
现在它的工作完美,就像我希望它能够工作一样。 更改numericupdown值时,它会更改节点树的展开/折叠级别。