我有以下問題。我正在通過一個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的第一通話結束後,出現的幽靈。任何想法可能是什麼問題?也許我還沒有找到正確的搜索條件,但到目前爲止,我沒有找到任何答案。
非常感謝!
大家好,我找到了答案(正確的搜索詞是「幻影」作爲原始的海報,我不知道爲什麼。這裏是我發現的原始論壇帖子:[Phantom Nodes](http://www.vbforums.com/showthread.php?654970-RESOLVED-Phantom-nodes-in-a-treeview) – korguell
你能分享上面使用的xml文件嗎代碼示例? – Munawar
你應該寫下你發現的東西,並接受它作爲答案,所以我們可以放棄它! – Hannele