您好,并提前感谢您的帮助。
我有一个从HDD文件夹集合中填充的树视图。它的结构类似于以下(但结构是动态的):
My Disk:
|
|--folder1(tag:folder)
| |--subfolder1(tag:folder)
|--folder2(tag:folder)
|--folder3(tag:folder)
|--folder4(tag:folder)
|file1(tag:file)
我想删除树中不包含标记为“file”的节点的所有节点(基本上是空文件夹)。我希望生成的树结构如下所示:
My Disk:
|--folder4(tag:folder)
|file1(tag:file)
我想出的最好成绩如下:
Private Sub deleteNode(byval nc as TreeNodeCollection)
For Each tn As TreeNode In nc
'delete node if it applies
If tn.Tag = "folder" Then
If tn.Nodes.Count = 0 Then
nc.Remove(tn)
End If
End If
If tn.Nodes.Count > 0 Then
deleteNode(tn.Nodes)
End If
Next
End Sub
我按如下方式调用sub:
deleteNode(treeview1.Nodes(0).Nodes)
但是,上述方法无法正常工作。它只删除一些节点而不是所有目标节点。你可以通过修理我的子来帮助我吗?
非常感谢
答案 0 :(得分:3)
据我所知,您无法编辑您要枚举的集合,因此删除某些节点也令人印象深刻。
您可以wanna try another approach:
Private Sub RemoveEmptyFolderNodes(ByVal nc as TreeNodeCollection)
For i As Integer = nc.Count - 1 To 0 Step -1
If nc(i).Nodes.Count > 0 Then
RemoveEmptyFolderNodes(nc(i).Nodes)
End If
If nc(i).Nodes.Count = 0 AndAlso nc(i).Tag.ToString() = "folder" Then
nc.RemoveAt(i)
End If
Next
End Sub
这是未经测试的。
答案 1 :(得分:0)
树视图最初是由我们的程序填充的?
如果是这样,只需添加带有该标记的节点。
如果没有,则每次循环都是一个问题,因为每次调用删除节点函数时都会更改treenode集合。
我已经通过创建一个集合来存储要删除的键来解决这个问题。在每个循环之后,您可以安全地删除所需的节点。冰川
例如:
Dim nNd As Node
Dim toDel As New Collection
For Each nNd In tvSS.Nodes
If nNd.tag="whatuwant" Then toDel.Add (nNd.Key)
Next
Do While toDel.Count > 0
tvSS.Nodes.Remove (toDel.Item(1))
toDel.Remove (1)
Loop
Set toDel = Nothing