TreeView1_DblClick()如何获取点击节点所属的第三级节点

时间:2021-04-21 05:36:36
有多个根节点和子节点,如何获取第三级的节点的tag。比如点击a4得到a2的tag,点击c5得到c2的tag。
A
  a1
      a2
           a3
              a4
B
    b1
       b2
          b3
             b4
C
    c1
       c2
          c4
             c4


For tt = 1 To UBound(idbsi)
                   If ii = 1 Then
                If glyuan = "" Then
                   rs2.Open "select * from " & bm & " where id=" & xuexiaoid & " and  b1=" & idbsi(tt), conn, 1, 1
                Else
                   rs2.Open "select * from " & bm & " where b1=" & idbsi(tt), conn, 1, 1
                End If
                Else
                rs2.Open "select * from " & bm & " where b1=" & idbsi(tt), conn, 1, 1
                End If
                     If Not rs2.EOF Then
                        While Not rs2.EOF
                          idbs2 = idbs2 & "//" & rs2.Fields("id")
                          
                           'Debug.Print "[外"; ii & "-内"; tt & "=" & idbs; "]" & "父节点:bm" & ii & "a" & Rs2.Fields("b1"), "下一父节点:bm" & ii + 1 & "a" & (Rs2.Fields("id"))
                            Set xNode = TreeView1.Nodes.Add("bm" & ii & "a" & rs2.Fields("b1"), tvwChild)
                            'xNode.Expanded = True
                           xNode.Key = "bm" & ii + 1 & "a" & (rs2.Fields("id"))
                           xNode.Tag = rs2.Fields("id")
                           xNode.Text = rs2.Fields("bm")
                           xNode.Image = 1
                           xNode.SelectedImage = 2
                         
                       rs2.MoveNext
                     Wend
                     Else
                     'MsgBox idbsi(tt)
                End If
   Next tt
  idbs = idbs2
  Next ii

Private Sub TreeView1_DblClick()
If mNodeClick = 1 Then Exit Sub
   MsgBox TreeView1.Nodes.Item(TreeView1.SelectedItem.Index).Text
 Unload Me
End Sub

这样不行

8 个解决方案

#1



For tt = 1 To UBound(idbsi)
                   If ii = 1 Then
                If glyuan = "" Then
                   rs2.Open "select * from " & bm & " where id=" & xuexiaoid & " and  b1=" & idbsi(tt), conn, 1, 1
                Else
                   rs2.Open "select * from " & bm & " where b1=" & idbsi(tt), conn, 1, 1
                End If
                Else
                rs2.Open "select * from " & bm & " where b1=" & idbsi(tt), conn, 1, 1
                End If
                     If Not rs2.EOF Then
                        While Not rs2.EOF
                          idbs2 = idbs2 & "//" & rs2.Fields("id")
                           
                           'Debug.Print "[外"; ii & "-内"; tt & "=" & idbs; "]" & "父节点:bm" & ii & "a" & Rs2.Fields("b1"), "下一父节点:bm" & ii + 1 & "a" & (Rs2.Fields("id"))
                            Set xNode = TreeView1.Nodes.Add("bm" & ii & "a" & rs2.Fields("b1"), tvwChild)
                            'xNode.Expanded = True
                           xNode.Key = "bm" & ii + 1 & "a" & (rs2.Fields("id"))
                           xNode.Tag = rs2.Fields("id")
                           xNode.Text = rs2.Fields("bm")
                           xNode.Image = 1
                           xNode.SelectedImage = 2
                          
                       rs2.MoveNext
                     Wend
                     Else
                     'MsgBox idbsi(tt)
                End If
   Next tt
  idbs = idbs2
  Next ii
 
Private Sub TreeView1_DblClick()
If mNodeClick = 1 Then Exit Sub
   MsgBox TreeView1.Nodes.Item(TreeView1.SelectedItem.Index).tag
 Unload Me
End Sub
 
这样不行

#2


.Tag  并不是只能放rs2.Fields("id")这一个东西,东西复杂就弄propertybag 简单点的就直接”当前节点ID|上一节点ID“,然后通过上一级节点ID找到上一节点,一级一级往上找就是了,这么简单的东西自己发挥一下呗

#3


可是有时候要获得下一级的节点的某个值,又如点击a1得到a2的tag,点击c1得到c2的tag。

#4


如何得到当前节点所在所有节点对应的tag(不是text),不会。求高手。

#5


本帖最后由 bcrun 于 2015-02-26 16:43:23 编辑
父节点:TreeView1.SelectedItem.Parent
父节点的父节点:TreeView1.SelectedItem.Parent.Parent
父节点的父节点的父节点:TreeView1.SelectedItem.Parent.Parent..Parent
……
子节点:TreeView1.SelectedItem.Child
子节点的子节点:TreeView1.SelectedItem.Child.Child
子节点的子节点的子节点:TreeView1.SelectedItem.Child.Child.Child
……

Private Sub Form_Load()
    Dim tnode As Node
    Set tnode = TreeView1.Nodes.Add
    tnode.Text = "0"
    tnode.Key = "n0"
    tnode.Expanded = True
    
    Dim xx As Long
    For xx = 1 To 10
        Set tnode = TreeView1.Nodes.Add("n" & (xx - 1), tvwChild, "n" & xx, xx)
        tnode.Expanded = True
    Next
End Sub

Private Sub TreeView1_Click()
On Error Resume Next
    Dim tnode As Node
    Set tnode = TreeView1.SelectedItem.Parent
    If Err.Number <> 0 Then
        MsgBox "无父节点"
        Err.Clear
    Else
        MsgBox "父节点是" & tnode.Text
    End If
    
    Set tnode = TreeView1.SelectedItem.Child
    If Err.Number <> 0 Then
        MsgBox "无子节点"
        Err.Clear
    Else
        MsgBox "子节点是" & tnode.Text
    End If
End Sub

#6


本帖最后由 bcrun 于 2015-02-26 16:41:45 编辑
引用 5 楼 CityBird 的回复:
父节点:TreeView1.SelectedItem.Parent
父节点的父节点:TreeView1.SelectedItem.Parent.Parent
父节点的父节点的父节点:TreeView1.SelectedItem.Parent.Parent..Parent
……
子节点:TreeView1.SelectedItem.Child
子节点的子节点:TreeView1.SelectedItem.Child.Child
子节点的子节点的子节点:TreeView1.SelectedItem.Child.Child.Child
……

Private Sub Form_Load()
    Dim tnode As Node
    Set tnode = TreeView1.Nodes.Add
    tnode.Text = "0"
    tnode.Key = "n0"
    tnode.Expanded = True
    
    Dim xx As Long
    For xx = 1 To 10
        Set tnode = TreeView1.Nodes.Add("n" & (xx - 1), tvwChild, "n" & xx, xx)
        tnode.Expanded = True
    Next
End Sub

Private Sub TreeView1_Click()
On Error Resume Next
    Dim tnode As Node
    Set tnode = TreeView1.SelectedItem.Parent
    If Err.Number <> 0 Then
        MsgBox "无父节点"
        Err.Clear
    Else
        MsgBox "父节点是" & tnode.Text
    End If
    
    Set tnode = TreeView1.SelectedItem.Child
    If Err.Number <> 0 Then
        MsgBox "无子节点"
        Err.Clear
    Else
        MsgBox "子节点是" & tnode.Text
    End If
End Sub
TreeView1_DblClick()如何获取点击节点所属的第三级节点

#7


父子节点那些我明白,但这个依然没有解决,可能是我没能说清楚我的目的?
我的目的是:无论这树有多少个节点,点击任意一个节点,都可以此节点对应的树的第2级节点的那个的tag,如点击a1得到a2的tag,点击c8也是得到c2的tag,这样。

谢谢高手了。

#8


A                      第0层
  a1                  第1层
      a2              第2层
           a3         第3层
              a4      第4层
B                      第0层
    b1                第1层
       b2             第2层
          b3          第3层
             b4       第4层
……
定义层数,根节点层数为0,其余节点层数等于父节点层数+1,层数值在添加Node的时候存到Node的.tag属性里面,具体方法见#2楼,从.SelectedItem.tag取当前节点的层数,循环.parent取父节点、父父节点、父父父节点一直取到.tag属性里面层数=2的节点或者循环.child取子节点、子子节点、子子子节点一直取到.tag属性里面层数=2的节点。

方法在#2、#5楼不都告诉你了,你就不知道自己动点脑子变通一下

#1



For tt = 1 To UBound(idbsi)
                   If ii = 1 Then
                If glyuan = "" Then
                   rs2.Open "select * from " & bm & " where id=" & xuexiaoid & " and  b1=" & idbsi(tt), conn, 1, 1
                Else
                   rs2.Open "select * from " & bm & " where b1=" & idbsi(tt), conn, 1, 1
                End If
                Else
                rs2.Open "select * from " & bm & " where b1=" & idbsi(tt), conn, 1, 1
                End If
                     If Not rs2.EOF Then
                        While Not rs2.EOF
                          idbs2 = idbs2 & "//" & rs2.Fields("id")
                           
                           'Debug.Print "[外"; ii & "-内"; tt & "=" & idbs; "]" & "父节点:bm" & ii & "a" & Rs2.Fields("b1"), "下一父节点:bm" & ii + 1 & "a" & (Rs2.Fields("id"))
                            Set xNode = TreeView1.Nodes.Add("bm" & ii & "a" & rs2.Fields("b1"), tvwChild)
                            'xNode.Expanded = True
                           xNode.Key = "bm" & ii + 1 & "a" & (rs2.Fields("id"))
                           xNode.Tag = rs2.Fields("id")
                           xNode.Text = rs2.Fields("bm")
                           xNode.Image = 1
                           xNode.SelectedImage = 2
                          
                       rs2.MoveNext
                     Wend
                     Else
                     'MsgBox idbsi(tt)
                End If
   Next tt
  idbs = idbs2
  Next ii
 
Private Sub TreeView1_DblClick()
If mNodeClick = 1 Then Exit Sub
   MsgBox TreeView1.Nodes.Item(TreeView1.SelectedItem.Index).tag
 Unload Me
End Sub
 
这样不行

#2


.Tag  并不是只能放rs2.Fields("id")这一个东西,东西复杂就弄propertybag 简单点的就直接”当前节点ID|上一节点ID“,然后通过上一级节点ID找到上一节点,一级一级往上找就是了,这么简单的东西自己发挥一下呗

#3


可是有时候要获得下一级的节点的某个值,又如点击a1得到a2的tag,点击c1得到c2的tag。

#4


如何得到当前节点所在所有节点对应的tag(不是text),不会。求高手。

#5


本帖最后由 bcrun 于 2015-02-26 16:43:23 编辑
父节点:TreeView1.SelectedItem.Parent
父节点的父节点:TreeView1.SelectedItem.Parent.Parent
父节点的父节点的父节点:TreeView1.SelectedItem.Parent.Parent..Parent
……
子节点:TreeView1.SelectedItem.Child
子节点的子节点:TreeView1.SelectedItem.Child.Child
子节点的子节点的子节点:TreeView1.SelectedItem.Child.Child.Child
……

Private Sub Form_Load()
    Dim tnode As Node
    Set tnode = TreeView1.Nodes.Add
    tnode.Text = "0"
    tnode.Key = "n0"
    tnode.Expanded = True
    
    Dim xx As Long
    For xx = 1 To 10
        Set tnode = TreeView1.Nodes.Add("n" & (xx - 1), tvwChild, "n" & xx, xx)
        tnode.Expanded = True
    Next
End Sub

Private Sub TreeView1_Click()
On Error Resume Next
    Dim tnode As Node
    Set tnode = TreeView1.SelectedItem.Parent
    If Err.Number <> 0 Then
        MsgBox "无父节点"
        Err.Clear
    Else
        MsgBox "父节点是" & tnode.Text
    End If
    
    Set tnode = TreeView1.SelectedItem.Child
    If Err.Number <> 0 Then
        MsgBox "无子节点"
        Err.Clear
    Else
        MsgBox "子节点是" & tnode.Text
    End If
End Sub

#6


本帖最后由 bcrun 于 2015-02-26 16:41:45 编辑
引用 5 楼 CityBird 的回复:
父节点:TreeView1.SelectedItem.Parent
父节点的父节点:TreeView1.SelectedItem.Parent.Parent
父节点的父节点的父节点:TreeView1.SelectedItem.Parent.Parent..Parent
……
子节点:TreeView1.SelectedItem.Child
子节点的子节点:TreeView1.SelectedItem.Child.Child
子节点的子节点的子节点:TreeView1.SelectedItem.Child.Child.Child
……

Private Sub Form_Load()
    Dim tnode As Node
    Set tnode = TreeView1.Nodes.Add
    tnode.Text = "0"
    tnode.Key = "n0"
    tnode.Expanded = True
    
    Dim xx As Long
    For xx = 1 To 10
        Set tnode = TreeView1.Nodes.Add("n" & (xx - 1), tvwChild, "n" & xx, xx)
        tnode.Expanded = True
    Next
End Sub

Private Sub TreeView1_Click()
On Error Resume Next
    Dim tnode As Node
    Set tnode = TreeView1.SelectedItem.Parent
    If Err.Number <> 0 Then
        MsgBox "无父节点"
        Err.Clear
    Else
        MsgBox "父节点是" & tnode.Text
    End If
    
    Set tnode = TreeView1.SelectedItem.Child
    If Err.Number <> 0 Then
        MsgBox "无子节点"
        Err.Clear
    Else
        MsgBox "子节点是" & tnode.Text
    End If
End Sub
TreeView1_DblClick()如何获取点击节点所属的第三级节点

#7


父子节点那些我明白,但这个依然没有解决,可能是我没能说清楚我的目的?
我的目的是:无论这树有多少个节点,点击任意一个节点,都可以此节点对应的树的第2级节点的那个的tag,如点击a1得到a2的tag,点击c8也是得到c2的tag,这样。

谢谢高手了。

#8


A                      第0层
  a1                  第1层
      a2              第2层
           a3         第3层
              a4      第4层
B                      第0层
    b1                第1层
       b2             第2层
          b3          第3层
             b4       第4层
……
定义层数,根节点层数为0,其余节点层数等于父节点层数+1,层数值在添加Node的时候存到Node的.tag属性里面,具体方法见#2楼,从.SelectedItem.tag取当前节点的层数,循环.parent取父节点、父父节点、父父父节点一直取到.tag属性里面层数=2的节点或者循环.child取子节点、子子节点、子子子节点一直取到.tag属性里面层数=2的节点。

方法在#2、#5楼不都告诉你了,你就不知道自己动点脑子变通一下