有没有简单的方法来检查扩展TreeNode及其子节点的状态?
bool IsAllNodesExpanded(TreeNode nodeToCheck)
{
// Use nodeToCheck.isExpanded
// Use something to check all childrens
// return something
}
答案 0 :(得分:1)
由于您的问题特定于特定的WinForm组件,但我要写的解决方案更为通用。因此,我会在考虑一般树的情况下向您解释我的解决方案,但我将为您提供的代码解决您自己的问题。
你想要做的基本上是一个tree traversal,它是遍历树的所有子节点的过程。基本上我们需要检查 all 节点的后代(而不是子节点)。孩子和后代之间的区别在于孩子们共享同一个父母(例如,当且仅当AB和C与X直接相关时,ABC是X的孩子),而后代可能是“孩子的孩子的孩子......” (例如:A是X的后代,如果从X开始,树上有路径,从节点X开始,向下到节点A )。
为了访问树的所有后代,我们需要一个递归函数。在我们的例子中,该函数返回一个布尔值,告诉我们是否扩展了特定起始节点的所有后代。 有一个示例代码可以完全满足您的要求:
bool areAllNodesExpanded(TreeNode nodeToCheck){
if(!nodeToCheck.IsExpanded)
return false;
foreach(TreeNode n in nodeToCheck.Nodes){
if (n.Nodes.Count == 0)
continue;
if(!areAllNodesExpanded(n))
return false;
}
return true;
}
希望这有帮助。
LuxGiammi
编辑:由于我犯了两个错误,无法编译上面的代码片段:
1.它是IsExpanded而不是isExpanded
2.出于某些原因,我不想进一步调查,var n
是object类型,而它应该是TreeNode
类型。
错误纠正
答案 1 :(得分:-1)
您可以引入自己的类TreeNode
,而不是使用TreeNode
。这个类可以有一个递归方法IsAllNodesExpanded
,如下所示:(未经测试)
public class MyTreeNode : TreeNode
{
public bool IsAllNodesExpanded()
{
if (!IsExpanded)
{
return false;
}
bool allChildsExpanded = true;
foreach (MyTreeNode child in Nodes.OfType<MyTreeNode>())
{
if (!child.IsAllNodesExpanded())
{
allChildsExpanded = false;
break;
}
}
return allChildsExpanded;
}
}