mmelone 发表于 2005-10-13 09:05:25

VB 6树视图和节点

我在一个表单上有一个treeview控件,该控件填充了许多父分支。每个父分支都包含许多子分支和孙子分支。每个节点都有一个复选框,用户可以选中或取消选中。我想做的是隐藏未选中的主父分支,从而隐藏它们下面的所有分支。相反,如果未选中任何内容,则所有分支都应可见(或启用)
我一直在考虑获取一个对我要从树中删除的所有根节点的引用,并将它们存储在一个集合中。然后,我可以使用该集合用“隐藏”的树枝重新填充树
Dim i As Long, upper As Long
Dim rootNodes As New Collection
Dim myNode As MSComctlLib.Node
upper = tvHoles.Nodes.Count
For i = 1 To upper
    Set myNode = tvHoles.Nodes.Item(i)   
    If myNode.Tag = "Root" Then
      rootNodes.Add myNode
    End If
Next
If rootNodes.Count > 0 Then
    Set myNode = rootNodes.Item(1)
    tvHoles.Nodes.Remove myNode.Index
    msgbox myNode.tag
End If

上面的代码片段成功地获取了对树视图中第一个根节点的引用,然后将其从树视图中删除。myNode对象似乎保留了对其在树中时拥有的所有内容的引用,包括其子对象。我似乎无法找到将myNode对象添加回树的方法。如果您能帮助实现此功能,甚至只是禁用节点,我们将不胜感激。
**** Hidden Message *****

mmelone 发表于 2005-10-13 09:46:43

不要担心这个...我决定放弃树景。事实证明,需要进行的更改使用户对treeview控件感到困惑。所以我选了几个盒子。

mmelone 发表于 2006-3-22 16:46:10

为了将来参考,我遇到了和你完全一样的问题,这是我的解决方案。(我直接从我的应用程序中复制了它,所以你必须通过并取出你不需要的东西,才能让它工作)

mmelone 发表于 2006-3-22 16:49:37

哦,是的,这里的关键是我使用了两个树视图。其中一个是未过滤的版本(其中包含所有节点),另一个在每次应用过滤器时都会被擦除,并根据过滤器条件重新填充。然后,您只需将所有事件传回原始树视图。例如
Private Sub FilterResults_NodeClick(ByVal Node As MSComctlLib.Node)
On Error GoTo Trap
ModelNames_NodeClick Node
Set ModelNames.SelectedItem = Node
Exit Sub
Trap:
Select Case MsgBox(Err.Description, vbAbortRetryIgnore, Err.Number)
    Case vbAbort
      Exit Sub
    Case vbRetry
      Stop
      Resume
    Case vbIgnore
      Resume Next
    End Select
End Sub

mmelone 发表于 2006-3-22 20:34:43

你好,梅隆先生。很高兴见到你。希望你过得好。
欢迎来到theSwamp。
页: [1]
查看完整版本: VB 6树视图和节点