4

我有以下问题。我正在通过一个 TreeView 来填充一个 XML 树,其中包含在我的 TreeView 中检查的项目。基本上一切正常,除了每次我完成填充 XML 树时,我都会在 TreeView 中获得我的 TreeView-rootnode 的副本。

奇怪的是,新节点的行为就像第一个节点的幽灵。我无法选中/取消选中复选框,但原始节点中的相应框已选中/取消选中。但我能够扩展或折叠幽灵的节点。

我的 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 的第一次调用完成,幽灵就会出现。任何想法可能是什么问题?也许我只是还没有找到正确的搜索词,但到目前为止我还没有找到任何答案。

非常感谢!

4

1 回答 1

1

来自 OP

大家好,我找到了答案(正确的搜索词是“幻影”):必须将根节点分配给一个变量,然后它才能工作。作为原始海报,我不知道为什么。这是我找到的原始论坛帖子:幻象节点

于 2013-09-17T18:25:48.180 回答