2015-03-02 70 views
0

我正在使用VS 2005(.NET 2.0)C#在Winform上使用XML解析到TreeView的功能。複選框檢查子節點的狀態

我打算啓用treeview列表的複選框。其實,我已經啓用了它們。我發現這個代碼here,同時尋找可能有所幫助的TreeView和TreeNode的一些屬性。我找到了TreeNode.Checked屬性和TreeView.CheckBoxes屬性。

public void HighlightCheckedNodes() 
{ 
    int countIndex = 0; 
    string selectedNode = "Selected customer nodes are : "; 
    foreach (TreeNode myNode in myTreeView.Nodes[0].Nodes) 
    { 
     // Check whether the tree node is checked. 
     if(myNode.Checked) 
     { 
     // Set the node's backColor. 
     myNode.BackColor = Color.Yellow; 
     selectedNode += myNode.Text+" "; 
     countIndex++; 
     } 
     else 
     myNode.BackColor = Color.White; 
    } 

    if(countIndex > 0) 
     MessageBox.Show(selectedNode); 
    else 
     MessageBox.Show("No nodes are selected"); 
} 

所以我在我的測試項目上試過,它只在父節點上工作,而不在子節點上。我想要做的和發生的事情是,我還必須確定孩子節點的選中狀態。我正在研究需要選擇單個到多個子節點並在檢查後執行一次外部程序的項目。這是可能的,與孩子節點?或者還有其他的選擇。

讓我知道,如果我什麼都不清楚。先謝謝你。

+2

用'的foreach(樹節點MYNODE在myTreeView.Nodes [0] .Nodes)'只取頂層節點。如果您需要下一個級別,請在每次迭代中也使用myNode.Nodes – ASh 2015-03-02 07:23:00

+0

這對節點級別是否有限制? – Kurisuchin 2015-03-02 08:25:51

回答

1

我認爲您需要將您的代碼更改爲以下內容(在我看來,您剛剛使用了來自MSDN的代碼)。給定的代碼提供了一個可以採用的樣本答案。

// Start from Root type node ; Loop them all 
    foreach (TreeNode rootNodes in treeView1.Nodes) 
    { 
     // Sub note set of current root 
     foreach (TreeNode childs in rootNodes.Nodes) 
     { 
      childs.Text = "Checked"; // Testing for validity : First level of child 

      /* 
      * Needs to go further down if we have childs of childs 
      foreach (TreeNode child_child in childs.Nodes) 
      { 
       child_child.Text = "Checked"; // Testing for validity : Second level of child 
      } 
     */ 
     } 
    } 

說明:

給出的例子將改變文本的結構如下(文字經過應用於童車)

ROOT 
    |-> Child 
    |-> Child 
    ROOT 
    |-> Child 
    |-> Child 

如果取消註釋內最foreach你可以將它應用到像下面這樣的結構((Text Checked applied to childs))

ROOT 
    |-> Child 
      |-> Child 
      |-> Child 
    |-> Child 
    ROOT 
    |-> Child 
    |-> Child 

在你的代碼中,你不會進一步深入TreeNode,你忘記了每個TreeNode都可以包含它自己的子節點集合。

簡單地說,

myTreeView.Nodes[0].Nodes // <- This is wrong for what you want 
+0

我確實使用了MSDN的示例代碼,看看它是如何工作的,也許我可能會從中得到一些想法。但我沒有。我認爲代碼缺乏或者與我想要的完全不同。謝謝。我會注意到這一點,我會嘗試。 – Kurisuchin 2015-03-02 08:17:45

+0

@Kurisuchin這很好..學習很難,但一旦你學習他們,他們變得容易:)嘗試建議和標記答案是正確的,如果它解決了問題:) – 2015-03-02 08:23:39

+1

以及這當然幫助我理解,所以我想這確實解決了問題。我必須進一步深入瞭解這一點,並在我目前的項目中實施。 – Kurisuchin 2015-03-02 09:06:05

相關問題