2017-06-07 8 views
0

TreeNodeとその子の状態を簡単に確認する方法はありますか?TreeNodeのすべてのサブノードが展開されているかどうかを確認する方法?

bool IsAllNodesExpanded(TreeNode nodeToCheck) 
{ 
    // Use nodeToCheck.isExpanded 
    // Use something to check all childrens 
    // return something 
} 
+0

ヒントのみ、c#を使用している場合は、メソッドにパスカルケースを使用してください。例: 'IsAllNodesExpanded' – BendEg

答えて

1

:このクラスは、再帰的な方法でこのような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である必要があります。 間違いが修正されました

+0

このコードスニペットはコンパイルされません... – user3292642

+0

あなたは正しいです...私が書く時には、私はuppecase文字を見逃しました...最も重要なことは、私がやっていることの*説明*は明確で、コードをそのまま「コピー&ペースト」しないでください。それは**非常に**危険なことです! – LuxGiammi

+0

foreachが 'if(n.Nodes.Count> 0) 'になった後は、最終ノードでそれが展開されていないことを検出します。なぜなら、子ノードがなく、展開できないからです。 – MrJW

-1

代わりの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; 
    } 
} 
+0

downvoteにコメントしてもらえますか? – user3292642

関連する問題