TreeNodeとその子の状態を簡単に確認する方法はありますか?TreeNodeのすべてのサブノードが展開されているかどうかを確認する方法?
bool IsAllNodesExpanded(TreeNode nodeToCheck)
{
// Use nodeToCheck.isExpanded
// Use something to check all childrens
// return something
}
TreeNodeとその子の状態を簡単に確認する方法はありますか?TreeNodeのすべてのサブノードが展開されているかどうかを確認する方法?
bool IsAllNodesExpanded(TreeNode nodeToCheck)
{
// Use nodeToCheck.isExpanded
// Use something to check all childrens
// return something
}
:このクラスは、再帰的な方法でこのようなIsAllNodesExpanded
を持つことができます。したがって、一般的なツリーを考えて私の解決方法を説明しますが、私が提供するコードはあなた自身の問題を解決します。
あなたがしたいことは基本的にはtree traversalです。これはルートを与えられたツリーのすべての子を走査するプロセスです。基本的には、ノードの子孫(子ではない)のすべてかどうかを確認する必要があります。子供と子孫の違いは、子どもが同じ親を共有していることです(例えば、ABCは、ABとCがXに直接接続されている場合のみ、Xの子です)。子孫は「子どもの子供... (例:AはXから出発した場合、ノードXから開始し、ノードAにダウンを進み、ツリー上パスがあるXの子孫である)。
訪問するためにこの関数は、特定の開始ノードのすべての子孫が展開されているかどうかを示すブール値を返します。 あなたが求めたものとまったく同じサンプルコードがあります:
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
編集:上記のコードが原因で私が作った2つのエラーでコンパイルできませんでした: 1.それはisExpandedとしてだと私はさらに調査する必要はありませんいくつかの理由から 2をisExpandedとしてではない、var n
があります型オブジェクトの場合はTreeNode
である必要があります。 間違いが修正されました
このコードスニペットはコンパイルされません... – user3292642
あなたは正しいです...私が書く時には、私はuppecase文字を見逃しました...最も重要なことは、私がやっていることの*説明*は明確で、コードをそのまま「コピー&ペースト」しないでください。それは**非常に**危険なことです! – LuxGiammi
foreachが 'if(n.Nodes.Count> 0) 'になった後は、最終ノードでそれが展開されていないことを検出します。なぜなら、子ノードがなく、展開できないからです。 – MrJW
代わりのTreeNode
を使用して、あなたはTreeNode
から派生する独自のクラスを紹介することができます。あなたの質問は、特定のWinFormコンポーネントに固有のものですが、私はあなたを書くつもりソリューションは、より一般的であるので(未テスト)
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;
}
}
downvoteにコメントしてもらえますか? – user3292642
ヒントのみ、c#を使用している場合は、メソッドにパスカルケースを使用してください。例: 'IsAllNodesExpanded' – BendEg