次の問題があります。TreeView を使用して、TreeView でチェックされている項目で XML ツリーを埋めています。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 の最初の呼び出しが完了すると、ゴーストが表示されます。問題の可能性はありますか?適切な検索用語がまだ見つかっていないだけかもしれませんが、これまでのところ、これに対する答えは見つかりませんでした。
どうもありがとう!