リストからTreeViewを読み込んでいますが、ユーザーにはアイテムを削除するボタンがあり、リストから削除しても問題ありませんが、アイテムが削除された後にリストでTreeViewを更新するボタンもあります。 TreeViewに新しいアイテムを追加しても問題はありませんが、新しいアイテムを追加する前にTreeViewのすべてのアイテムをクリアする方法はあります。そのため、TreeViewに重複はありませんか?私は答えを見つけるためにインターネット上の他の場所を探してみましたが、それを見つけることができません。私は次のような簡単なことを試しました:
treeView1.Items.Clear();
しかし、それは機能しません。
申し訳ありませんが、私はコメントでそれを述べましたが、以下では、この行が実際にそれをクリアしていると確信しています。正しい場所で使用していないので、回答ありがとうございます。
まず、例では、ItemsとClearを大文字にする必要があります。多分それが唯一の問題です。
2つ目は、ItemsSourceを設定してツリーにデータを追加する場合、Itemsコレクションのアイテムを手動で追加および削除することはできません。代わりに、ソースではなくリストをObservableCollectionにする必要があります。次に、ツリービューが自動的に更新され、ソースコレクションの変更が反映されます。
ツリービューをクリアするには、ノードをクリアします。
treeView1.Nodes.Clear();
試しましたか
treeView1.DataBind();
更新を行うときに、TreeViewをクリアした後、再帰的にメソッドを設定しました。参照でTreeNodeを渡していたため、ClearがNodesリストからノードを論理的に削除した場合でも、TreeViewでノードを表示したり選択したりできます。 TreeNodeを値で渡すようにメソッドを変更すると、ノードを正しくクリアできました。以下のサンプルのByRefをByVal(VB.NETの場合)に変更する必要がありました。
Private Sub DisplayPackageSubTree()
trvEntries.Nodes.Clear()
trvEntries.SelectedNode = trvEntries.Nodes.Add("Node0", "Root Node", -1, -1)
DisplayFolderTree(_folderContents, trvEntries.Nodes(0))
trvEntries.ExpandAll()
trvEntries.SelectedNode = trvEntries.Nodes(0)
trvEntries.Refresh()
End Sub
Private Sub DisplayFolderTree(ByVal folderContents As SubFolder, ByRef folderNode As TreeNode)
For Each entry As SubEntry In folderContents.Contents
If TypeOf entry Is SubFolder Then
Dim newNode As TreeNode = folderNode.Nodes.Add(entry.Name, entry.Name, 0, 0)
DisplayFolderTree(entry, newNode)
ElseIf TypeOf entry Is SubDocument Then
folderNode.Nodes.Add(entry.Name, entry.Name, 1, 1)
End If
Next
End Sub