在改变treeview的当前选择节点后触发什么事件??

解决方案 »

  1.   

    Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
       If Node Is Nothing Then
          Exit Sub
       End If
       Call LoadData2(Node)
    End Sub其實你可以一個個debug.print出所有事件的順序
      

  2.   

    呵呵nodeclick不行,如果在程序中改变了treeview的当前选择节点不触发这个事件。还有,例如我要删除一个节点的子节点后,默认当前节点变到了该节点,也不会触发这个事件。删除节点后,当前节点也会发生变化,但不触发这个事件,但是当前节点肯定是变化了。
      

  3.   

    你把你所有的事件全部debug.print一遍,你覺得放那裡好就那裡吧
      

  4.   

    nodeclick事件是鼠标双击和单击时候发生的
      

  5.   

    没有事件发生.
    不信你看下面试验程序:
    在调试窗口中会列出当前所发生的事件(已经将MOUSERMOVE排除).'**实验程序***'引用==>Microsoft Scripting Runtime
    Private WithEvents Ev_ConDfmt As VBControlExtender '定义一个通用事件Private Sub Form_Load()
        Dim fs As New FileSystemObject
        Dim fd As Folder, sfd As Folder
        
        Set TreeView1.ImageList = ImageList1
        
        TreeView1.Nodes.Add , , "c:\", "c:\", "Drive"
        Set fd = fs.GetFolder("c:\")
        For Each sfd In fd.SubFolders
            TreeView1.Nodes.Add "c:\", tvwChild, "A" & sfd.Name, sfd.Name, "Folder"
            Combo1.AddItem "A" & sfd.Name
        Next
    '     Combo1.Text = Combo1.List(0)
    '    TreeView1.Nodes("c:\").Expanded = True
        Set Ev_ConDfmt = TreeView1
    End SubPrivate Sub Ev_ConDfmt_ObjectEvent(Info As EventInfo) '通用事件接口(用于不属于标准EXE控件)
            Dim P As EventParameter
            Dim MidStr As String
            
            On Error Resume Next        If UCase$(Info.Name) <> "MOUSEMOVE" Then Debug.Print UCase$(Info.Name)
    End Sub
      

  6.   

    当然...
    你可以自定义一个事件...
    侦测到两个NODE的KEY值不同时,你引发该事件即可.
      

  7.   

    9, 如何控制点击不同的节点执行不同的任务
    Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
     ' MsgBox Mid(Node.Key, 1, 1)
     ' MsgBox Node.Key '输出节点k的位置
     ' MsgBox Node.Text '输出节点的值
       If Node.Text = "aa" Then
          MsgBox ("ok")
       End If
    End Sub
    1,添加节点:
    TreeView1.Nodes.Add , "R", "root", ""
        TreeView1.Nodes.Add "root", tvwChild, "key1", "aa"
        TreeView1.Nodes.Add "key1", tvwChild, "key11", "ccc"
        TreeView1.Nodes.Add "root", tvwChild, "key2", "bb"
        TreeView1.Nodes.Add "key2", tvwChild, "key21", "ddd"
        TreeView1.Nodes.Add "key2", tvwChild, "key22", "eee"
        TreeView1.Nodes.Add "key22", tvwChild, "key221", "fff"
        For i = 1 To TreeView1.Nodes.Count
            TreeView1.Nodes(i).Expanded = True '展开纪录
        Next
       ' TreeView1.Checkboxes = True    '添加复选框
        TreeView1.Nodes.Add , "R", "root", ""
        TreeView1.Nodes.Add "root", tvwChild, "key1", "aa"
        TreeView1.Nodes.Add "key1", tvwChild, "key11", "ccc"
        TreeView1.Nodes.Add "root", tvwChild, "key2", "bb"
        TreeView1.Nodes.Add "key2", tvwChild, "key21", "ddd"
        TreeView1.Nodes.Add "key2", tvwChild, "key22", "eee"
        TreeView1.Nodes.Add "key22", tvwChild, "key221", "fff"
        For i = 1 To TreeView1.Nodes.Count
            TreeView1.Nodes(i).Expanded = True '展开纪录
        Next
        'TreeView1.Checkboxes = True    '添加复选框Dim nodX As Node
       
      'add some test items
       Set nodX = TV1.Nodes.Add(, , "R", "Root")
       Set nodX = TV1.Nodes.Add("R", tvwChild, "C1", "Child 1")
       Set nodX = TV1.Nodes.Add("R", tvwChild, "C2", "Child 2")
       Set nodX = TV1.Nodes.Add("R", tvwChild, "C3", "Child 3")
       Set nodX = TV1.Nodes.Add("R", tvwChild, "C4", "Child 4")
       nodX.EnsureVisible
       
       Set nodX = TV1.Nodes.Add("C3", tvwChild, "C31", "Child 3 SubC 1")
       Set nodX = TV1.Nodes.Add("C3", tvwChild, "C32", "Child 3 SubC 2")
       nodX.EnsureVisible
       
       Set nodX = TV1.Nodes.Add("C31", tvwChild, "C321", "Child 3 SubC 1 SubC 1")
       
       Set nodX = TV1.Nodes.Add("C4", tvwChild, "C41", "Child 4 Subchild 1")
       nodX.EnsureVisible
    2,添加复选框
          'TreeView1.Checkboxes = True    '添加复选框
    3,遍历TreeView的代码Private Sub Command1_Click()
        Dim i As Long
        
        For i = 1 To TreeView1.Nodes.Count
            MsgBox TreeView1.Nodes(i).Text
        Next
    End Sub
    4点击某个节点得到次节点的路径
    Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
        MsgBox Node.FullPath
    End Sub
    7, 全部展开与合龙树
    For i = 1 To TreeView1.Nodes.Count
            TreeView1.Nodes(i).Expanded = True '展开纪录
            Next
    8, 输出节点K的位置
    Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
     ' MsgBox Mid(Node.Key, 1, 1)
      MsgBox Node.Key               '輸出節點的k的值(節點位置)End Sub
    9, 如何控制点击不同的节点执行不同的任务
    Private Sub TreeView1_NodeClick(ByVal Node As ComctlLib.Node)
     ' MsgBox Mid(Node.Key, 1, 1)
     ' MsgBox Node.Key '输出节点k的位置
     ' MsgBox Node.Text '输出节点的值
       If Node.Text = "aa" Then
          MsgBox ("ok")
       End If
    End Sub
    10, 清空所有的节点
       TreeView1.Nodes.Clear
    9,添加图片:
    Dim imgx As ListImage
      Set imgx = ImageList1.ListImages.Add(, , LoadPicture("c:\1.ico"))
        Set imgx = ImageList1.ListImages.Add(, , LoadPicture("c:\2.ico"))
          
     TreeView1.ImageList = ImageList1可是我想把ICO放到VB做的软件的目录里,并且不想用绝对路径。。
    要怎么弄?Set imgx = ImageList1.ListImages.Add(, , LoadPicture(app.Path & "\1.ico"))
    或者把图片放到ImageList控件里。
    添加ImageList控件到窗体,设置自定义,--->图像---->插入图片10,读入数据
    一个表
    id(index)   parentid  name
    1             o          a
    2             1          aa
    3             1          ab
    4             2          aa1如何生成树
     a- aa
        | - aa1
        |ab
    谢谢
    SQL = "SELECT * FROM 表 ORDER BY parentid"
        rs.open SQL
        Do Until rs.EOF
            If rs!parentid = 0 Then
                tvDB.Nodes.Add , , "N" & rs!id, rs!name
            Else
                tvDB.Nodes.Add "N" & rs!parentid, 4, "N" & rs!id, rs!name
            End If
            rs.movenext
        Loop