2012-12-11 103 views
4

我有以下問題。我正在通過一個TreeView來填充一個XML樹,其中包含在我的TreeView中檢查的項目。基本上,一切工作正常,除了每次我填寫完XML樹後,我都會在TreeView中獲得我的TreeView-rootnode的副本。TreeView的根節點被複制

奇怪的是,新節點的行爲像第一個鬼。我無法選中/取消選中複選框,但是原始節點中的相應框被選中/取消選中。但我能夠展開或摺疊鬼魂的節點。

我TreeView.Nodes的計數也停留在1,所以刪除鬼是不可能的,因爲它不在那裏。我也嘗試刷新TreeView,但沒有改變。即使清除TreeView也不會擺脫鬼影(清除也不是首選選項;))。

這裏的代碼中的相關部分:

Private Sub btnSaveReport_Click(sender As System.Object, e As System.EventArgs) Handles btnSaveReport.Click 
    Dim newXML As XDocument = XDocument.Load("some.xml") 
    Dim xmlTree As XElement = newXML.Root 
    buildReportTree(trvMyTree.Nodes(0), xmlTree) 
    Console.WriteLine(xmlTree) 
End Sub 

Private Sub buildReportTree(ByRef treeNode As TreeNode, ByRef currentElement As XElement) 
    If treeNode.Checked Then 
     Dim newNode As XElement 
     newNode = buildReportNode(treeNode) 
     currentElement.Add(newNode) 
     For Each childNode As TreeNode In treeNode.Nodes 
      buildReportTree(childNode, newNode) 
     Next 
    End If 
End Sub 

Private Function buildReportNode(treeNode As TreeNode) As XElement 
    If treeNode.ToolTipText = "property" Then 
     Dim newNode As XElement = New XElement(treeNode.ToolTipText, treeNode.Name) 
     Return newNode 
    End If 
    If treeNode.ToolTipText = "collection" Or treeNode.ToolTipText = "reference" Then 
     Dim newNode As XElement = New XElement(treeNode.ToolTipText, _ 
            New XAttribute("name", treeNode.Name)) 
     Return newNode 
    End If 
    Return Nothing ' ToDo: handle errors 
End Function 

一旦buildReportTree的第一通話結束後,出現的幽靈。任何想法可能是什麼問題?也許我還沒有找到正確的搜索條件,但到目前爲止,我沒有找到任何答案。

非常感謝!

+2

大家好,我找到了答案(正確的搜索詞是「幻影」作爲原始的海報,我不知道爲什麼。這裏是我發現的原始論壇帖子:[Phantom Nodes](http://www.vbforums.com/showthread.php?654970-RESOLVED-Phantom-nodes-in-a-treeview) – korguell

+0

你能分享上面使用的xml文件嗎代碼示例? – Munawar

+2

你應該寫下你發現的東西,並接受它作爲答案,所以我們可以放棄它! – Hannele

回答

1

From the OP

大家好,我找到了答案(正確的搜索詞是「幽靈」):根節點必須分配給一個變量,那麼它的工作原理。作爲原始的海報,我不知道爲什麼。這裏是我發現原來的論壇帖子:Phantom Nodes