2012-12-11 72 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