我想用treeview来显示某高校的院系、专业、班级的情况。然后通过对treeview里内容的修改,同步实现对数据库的修改。我现在主要是不知道treeview怎么用?msdn介绍得太不明白了。哪位高手能给我一些建议?

解决方案 »

  1.   

    '給你一個例子參考一下:
    '========================================================'******TreeView的使用,及选中其中指定的节点'========================================================Private Sub Command1_Click()
    Dim nodeY As Node
    For Each nodeY In TreeView1.Nodes
        If CStr(Trim(nodeY.Text)) = "ff" Then
           nodeY.Selected = True
           TreeView1.SetFocus
           Exit For
        End If
    Next
    End SubPrivate Sub Form_Load()
    Rs1.CommandType = adCmdText
    Rs1.RecordSource = "select distinct biao,zu from test order by zu"
    Rs1.Refresh
    Dim Rs As ADODB.Recordset
    Set Rs = Rs1.Recordset
        Set nodX = TreeView1.Nodes.Add(, , "r", "报表组  ")
            i = 0
        Dim TempString As String
        Dim TempKey As Long
        Do Until Rs.EOF Or Rs.BOF
         If TempString = Rs!zu Then
            Set nodeX = TreeView1.Nodes.Add("Z" & TempKey, tvwChild, "B" & i, Rs!biao)
         Else
            Set nodX = TreeView1.Nodes.Add("r", tvwChild, "Z" & i, Rs!zu)
            Set nodeX = TreeView1.Nodes.Add("Z" & i, tvwChild, "B" & i, Rs!biao)
            TempString = Rs!zu
            TempKey = i
         End If
            Rs.MoveNext
            i = i + 1
        Loop
    End Sub
      

  2.   

    树状浏览器添加节点的例子:
    Option Explicit
    Private Sub Form_Load()
        Dim nodF As Node
        Dim intI As Integer
        Set nodF = TreeView1.Nodes.Add(, , "L0", "家庭")
        Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L1", "李国", 1, 2)
        Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L2", "李富", 1, 2)
        Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L3", "李民", 1, 2)
        Set nodF = TreeView1.Nodes.Add(1, tvwChild, "L4", "李强", 1, 2)
        nodF.EnsureVisible      '自节点“李强”起向前展开
        Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL1", "李太", 1, 2)
        Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL2", "李平", 1, 2)
        Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL3", "李盛", 1, 2)
        Set nodF = TreeView1.Nodes.Add("L1", tvwChild, "LL4", "李世", 1, 2)
        Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL1", "李百", 1, 2)
        Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL2", "李花", 1, 2)
        Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL3", "李争", 1, 2)
        Set nodF = TreeView1.Nodes.Add("LL1", tvwChild, "LLL4", "李艳", 1, 2)
        Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL1", "李皆", 1, 2)
        Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL2", "李大", 1, 2)
        Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL3", "李欢", 1, 2)
        Set nodF = TreeView1.Nodes.Add("LLL1", tvwChild, "LLLL4", "李喜", 1, 2)
    '为节点集合配展开后的图形
        For intI = 1 To TreeView1.Nodes.Count
            TreeView1.Nodes(intI).ExpandedImage = 3
        Next
    End Sub
      

  3.   

    树状浏览器拖放的例子:
    Option Explicit'复制或移动一个节点的所有子节点的递归过程
    Sub treCopySub(treSource As TreeView, nodSource As Node, _
                treDest As TreeView, nodDest As Node)
        Dim intI As Integer
        Dim nodS As Node                '源节点
        Dim nodD As Node                '目标节点
        If nodSource.Children = 0 Then Exit Sub
        
        Set nodS = nodSource.Child
        For intI = 1 To nodSource.Children
    '在目标树状浏览器增加一个节点
            Set nodD = treDest.Nodes.Add(nodDest, tvwChild, , _
                nodS.Text, nodS.Image, nodS.SelectedImage)
            nodD.ExpandedImage = nodS.ExpandedImage
    '以递归的方式加该节点的所有子节点
            treCopySub treSource, nodS, treDest, nodD
    '引用下一个相邻的同层节点
            Set nodS = nodS.Next
        Next intI
    End Sub'递归删除节点的子树
    Sub treDeleSub(treA As TreeView, nodA As Node)
        Dim intI As Integer, nodB As Node, nodC As Node
    '首先删除子节点
        Set nodB = nodA.Child
        For intI = 1 To nodA.Children
    '在删除一个节点之前,引用该节点的同层的下一个相邻节点
            Set nodC = nodB.Next
            treDeleSub treA, nodB
            Set nodB = nodC
        Next intI
    '删除该节点
        treA.Nodes.Remove nodA.Index
    End SubOption Explicit
    Dim treSource As TreeView           '源树状浏览器
    Dim nodSource As Node               '源节点
    Dim keyState As Integer             'Shift键的状态Private Sub Form_Load()
        Dim nodF As Node
        Dim intI As Integer
        Set nodF = TreeView1(0).Nodes.Add(, , "L0", "家庭")
        Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L1", "李国", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L2", "李富", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L3", "李民", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add(1, tvwChild, "L4", "李强", 1, 2)
        nodF.EnsureVisible      '自节点“李强”起向前展开
        Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL1", "李太", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL2", "李平", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL3", "李盛", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("L1", tvwChild, "LL4", "李世", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL1", "李百", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL2", "李花", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL3", "李争", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("LL1", tvwChild, "LLL4", "李艳", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL1", "李皆", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL2", "李大", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL3", "李欢", 1, 2)
        Set nodF = TreeView1(0).Nodes.Add("LLL1", tvwChild, "LLLL4", "李喜", 1, 2)
    '为节点集合配展开后的图形
        For intI = 1 To TreeView1(0).Nodes.Count
            TreeView1(0).Nodes(intI).ExpandedImage = 3
        Next
    End Sub'按下鼠标右键进入拖动进程
    'Index为0或1表示树状浏览器控件数组的元素
    Private Sub TreeView1_MouseDown(Index As Integer, Button As Integer, _
                                Shift As Integer, x As Single, y As Single)
    '在拖放时必须使用鼠标右键
        If Button <> 2 Then Exit Sub
    '根据当时鼠标所在的位置,确定被拖放的节点nodSource
        Set nodSource = TreeView1(Index).HitTest(x, y)
        If nodSource Is Nothing Then Exit Sub
    '保存当时鼠标所在的树状浏览器作为源treSource
        Set treSource = TreeView1(Index)
        keyState = Shift        '取得Shift键状态
    '进入拖放操作进程
        TreeView1(Index).OLEDrag
    End Sub'OLEDrag方法引发OLEStartDrag事件
    'Index为0或1表示树状浏览器控件数组的元素
    Private Sub TreeView1_OLEStartDrag(Index As Integer, _
                Data As MSComctlLib.DataObject, AllowedEffects As Long)
        ' pass the Key property of the Node being dragged
    '将nodSource.Key插入DataObject对象
        Data.SetData nodSource.Key
        If keyState And vbCtrlMask Then
    '使用了Ctrl键,这时是复制操作
            AllowedEffects = vbDropEffectCopy
        Else
    '没有使用Ctrl键,这时是移动操作
    '删除拖放的源数据
            AllowedEffects = vbDropEffectMove
        End If
    End Sub'当一个部件在另一个部件上拖动时引发
    'Index为0或1表示树状浏览器控件数组的元素
    Private Sub TreeView1_OLEDragOver(Index As Integer, _
            Data As MSComctlLib.DataObject, Effect As Long, _
            Button As Integer, Shift As Integer, x As Single, y As Single, _
            State As Integer)
    '当鼠光标位于节点上时,节点高亮显示
        Set TreeView1(Index).DropHighlight = TreeView1(Index).HitTest(x, y)
    End Sub'源部件放到目标部件时引发
    'Index为0或1表示树状浏览器控件数组的元素
    Private Sub TreeView1_OLEDragDrop(Index As Integer, _
            Data As MSComctlLib.DataObject, Effect As Long, _
            Button As Integer, Shift As Integer, x As Single, y As Single)
        Dim nodDest As Node, nodA As Node
    '拖放的目标节点
        Set nodDest = TreeView1(Index).DropHighlight
        If nodDest Is Nothing Then
    '将该节点作为目标树状浏览器的根节点
            Set nodA = TreeView1(Index).Nodes.Add(, , , nodSource.Text, _
                                                        nodSource.Image)
        Else
    '检查目标节点是不是与源节点等同
            If treSource Is TreeView1(Index) Then
                Set nodA = nodDest
                Do
                    If nodA Is nodSource Then   '目标节点与源节点等同
                        MsgBox "不能拖放!", vbExclamation
                        Exit Sub
                    End If
                    Set nodA = nodA.Parent
                Loop Until nodA Is Nothing
            End If
            Set nodA = TreeView1(Index).Nodes.Add(nodDest.Index, _
                tvwChild, , nodSource.Text, nodSource.Image)
        End If
        nodA.ExpandedImage = 2              '展开图形
        nodA.Expanded = True
        
        treCopySub treSource, nodSource, TreeView1(Index), nodA
        ' if this is a move operation, delete the source subtree
        If Effect = vbDropEffectMove Then
            treDeleSub treSource, nodSource
        End If
        Set TreeView1(Index).DropHighlight = Nothing
    End Sub
      

  4.   

    再请问,treeview的默认属性是每个结点的text可以直接在上面更改,怎样能使它不能被用户更改?
      

  5.   

    //treeview的默认属性是每个结点的text可以直接在上面更改,怎样能使它不能被用户更改?
    TreeView1.LabelEdit = tvwManual