教学管理
   |
   |---计算机科学系统
   |            
   |
   |---教学经费
         |
             |---信息系
         |---建筑系
              |------机电系
===============================================================
在上面的TreeView中,我如何可以实现按住"Ctrl"键,把信息系,建筑系,机电系
同时选中呢???   按住"Shift"建,点信息系,再点一下机电系,也会把信息系,机
电系,建筑系选中呢?谢谢,在线等

解决方案 »

  1.   

    实现多选没问题的啊,建议定义一个枚举类型用来表明当前节点的选择模式,并定义一个该类型的实例变量如下:
    Public Enum NodeSelectionMode
        None = 0    '正常模式
        Ctrl = 1    'Ctrl模式
        Shift = 2   'Shift模式
    End Enum
    Dim m_SelectionMode As NodeSelectionMode然后在Treeview的KeyDown中设置模式,KeyUp中重置模式如下:
    Private Sub TreeView1_KeyDown(KeyCode As Integer, Shift As Integer)
        If KeyCode = vbKeyControl Then
            m_SelectionMode = m_Ctrl
        ElseIf KeyCode = vbKeyShift Then
            m_SelectionMode = sm_Shift
        Else
            m_SelectionMode = sm_None
        End If
    End Sub
    Private Sub TreeView1_KeyUp(KeyCode As Integer, Shift As Integer)
        m_SelectionMode = sm_None
    End Sub最后在NodeClick中根据模式设定进行节点选择
    Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
    dim i as integer
    Select Case m_SelectionMode
        Case sm_None
                '将其他节点设置为未选中,并更改前景和背景色
                For i = 0 To TreeView1.Nodes.Count
                    If TreeView1.Nodes(i) <> Node Then
                        TreeView1.Nodes(i).Selected = False
                        TreeView1.Nodes(i).ForeColor = VBRUN.ColorConstants.vbBlack
                        TreeView1.Nodes(i).BackColor = VBRUN.ColorConstants.vbWhite
                    End If
                Next i
                Node.BackColor = &H8000000D
        Case sm_Ctrl
                If Node.BackColor <> &H8000000D Then
                    TreeView1.Nodes(Node.Key).ForeColor = vbWhite
                    TreeView1.Nodes(Node.Key).BackColor = &H8000000D
                Else
                    '如果点击选中的节点,则取消选中
                  TreeView1.Nodes(Node.Key).ForeColor = vbBlack
                    TreeView1.Nodes(Node.Key).BackColor = vbWhite
                    Node.Selected = True
                End If
        Case sm_Shift
               一个For循环,选中节点......
        case else
    End Select
    End Sub具体代码不多写了,我想你也应该明白怎么处理了吧.
      

  2.   

    在treeview前面加上复选框,只要设置一个属性就行了。
      

  3.   

    http://www.vbaccelerator.com/home/VB/Code/Controls/TreeView/Multi-Select_TreeView/article.asp