2012-11-30 17 views
0

我有遞歸程序來添加節點t樹視圖,但我想有自下而上的方法來做到這一點。我想要得到在一個節點中選擇的子節點的數量,包括子目錄

我已經這樣做了,到目前爲止,但它不工作

private void TreeviewCountCheckedNodes(TreeNodeCollection treeNodeCollection) 
{ 
    TreeNode node = treeNodeCollection[0]; 
    int countchecked = 0; 
    if (node != null) 
    { 
     foreach (TreeNode childnode in node.Nodes) 
     { 
      if (childnode.Nodes.Count == 0 && childnode.Checked) 
      { 
       countchecked++; 
      } 
      else if (childnode.Nodes.Count > 0) 
      { 
       TreeviewCountCheckedNodes(childnode.Nodes); 
      } 
     } 
    } 
} 
+2

你好,歡迎來到Stack Overflow。 [請問您可以編輯問題以反映您迄今爲止所嘗試的內容嗎?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – kush

+0

請將編程語言添加爲'標籤'獲得代碼高亮 – Simulant

+0

@Simulant沒有_not_知道,整潔。 – Rawling

回答

1
private int TreeviewCountCheckedNodes(TreeNodeCollection treeNodeCollection) 
     { 
      int countchecked = 0; 
      if (treeNodeCollection != null) 
      { 
       foreach (TreeNode node in treeNodeCollection) 
       { 
        if (node.Nodes.Count == 0 && node.Checked) 
        { 
         countchecked++; 
        } 
        else if (node.Nodes.Count > 0) 
        { 
         countchecked += TreeviewCountCheckedNodes(node.Nodes); 
        } 
       } 
      } 
      return countchecked; 
     } 

電話:

int coount = TreeviewCountCheckedNodes(treeView.Nodes); 
+0

感謝您的迴應!計數在每次遞歸調用中都被重置爲0,但是我想要在子目錄中進行計數。 –

+0

這將計算樹視圖的所有選中樹葉。你的意思是你想在結果中包含檢查過的子節點嗎? – Arie

0

我在這裏發佈這個代碼以爲這樣可以幫助別人。

該代碼檢索樹視圖中所有檢查節點的計數。

int checkedNodesCount = 0; 

private int GetCheckedNodesCount(TreeNodeCollection treeNodeCollection) 
    { 

     TreeNode node = treeNodeCollection[0]; 


     if (node != null) 
     { 
      if (node.Nodes.Count > 0) 
      { 
       foreach (TreeNode childnode in node.Nodes) 
       { 
        if (childnode.Nodes.Count == 0 && childnode.Checked) 
        { 
         checkedNodesCount++; 
        } 
        else if (childnode.Nodes.Count > 0) 
        { 
         checkedNodesCount += GetCheckedNodesCount(childnode.Nodes); 
        } 
       } 
      } 
      else 
      { 
       if (node.Checked) 
       { 
        checkedNodesCount++; 
       } 
      } 
     } 
     return checkedNodesCount; 
    }