我有以下问题。我正在通过一个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