【问题标题】:Creating a child node to a child node in vb.net with TreeView使用 TreeView 在 vb.net 中为子节点创建子节点
【发布时间】:2014-12-04 20:10:26
【问题描述】:

我正在尝试以编程方式将子节点添加到我的 TreeView。

最初我使用TreeView1.Nodes(0).Nodes(0).Nodes(0)手动完成它们... 这自然开始看起来很讨厌,但是当我尝试将记录附加到记录时也不起作用。

我当前的代码将采用我的所有代码并将其放置在根级别,因为使用的函数TreeView1.Nodes.Add(tn) 在技术上是明智的根代码。如何在无需手动编码的情况下使其动态化(避免TreeView1.Nodes(0).Nodes(0).Nodes(0)...)

顺序是:

Main
 |_ Screen
     |_ Msg
     |_ A
     |_ B
     |_ C
     |_ D

VB.net

    add_child_node(doc.DocumentElement.SelectSingleNode("/Main").Name)

    Private Sub add_child_node(NodeName As String)
        Dim tn As New TreeNode(NodeName)
        'TreeView1.SelectedNode.Nodes.Add(tn)
        TreeView1.Nodes.Add(tn)
    End Sub

XML

    <Main>  
      <Screen ID="0" ParentID="-1">
        <Msg></Msg>
        <A ChildID="1"></A>
        <B ChildID=""></B>
        <C ChildID=""></C>
        <D ChildID=""></D>
      </Screen>
    </Main>

【问题讨论】:

  • 您可以将节点放在变量中。 mainNode = TreeView1.Nodes(0), screenNode = mainNode.Nodes(0), msgNode = screenNode.Nodes(0)
  • 1.请注意,添加 TreeNode 的方法(添加、插入)都返回添加的节点。您可以使用生成的节点的 Nodes 集合来添加子节点。
  • 2.树是使用递归的好时机。

标签: xml vb.net treenode


【解决方案1】:

TreeNode:它是如何工作的?

Dim ScreenNode As TreeNode
Dim MyChildNode As TreeNode = TreeView1.Nodes.Add("<Main>")

    'TreeView
    ' |_ <Main> <- MyChildNode points to this Node

MyChildNode = MyChildNode.Nodes.Add("<Screen>")
ScreenNode = MyChildNode

    'TreeView
    ' |_ <Main>
    '     |_ <Screen> <- MyChildNode and ScreenNode both are pointing to this Node

MyChildNode = MyChildNode.Parent

    'TreeView
    ' |_ <Main> <- MyChildNode points to this Node
    '     |_ <Screen> <- ScreenNode points to this Node

MyChildNode = MyChildNode.Nodes.Add("<Screen2>")

    'TreeView
    ' |_ <Main>
    '     |_ <Screen> <- ScreenNode points to this Node
    '     |_ <Screen2> <- MyChildNode points to this Node

MyChildNode = TreeView1.Nodes.Add("<Main2>")

    'TreeView
    ' |_ <Main>
    ' |   |_ <Screen> <- ScreenNode points to this Node
    ' |   |_ <Screen2>
    ' |_ <Main2> <- MyChildNode points to this Node

Dim CurrentNode As TreeNode
For i As Int32 = 1 To 5
    CurrentNode = MyChildNode.Nodes.Add(i.ToString())
Next
MyChildNode = CurrentNode

    'TreeView
    ' |_ <Main>
    ' |   |_ <Screen> <- ScreenNode points to this Node
    ' |   |_ <Screen2>
    ' |_ <Main2>
    '     |_ <1>
    '     |_ <2>
    '     |_ <3>
    '     |_ <4>
    '     |_ <5> <- MyChildNode points to this Node

ScreenNode.Nodes.Add("<Msg>")

    'TreeView
    ' |_ <Main>
    ' |   |_ <Screen> <- ScreenNode points to this Node
    ' |       |_ <Msg>
    ' |   |_ <Screen2>
    ' |_ <Main2>
    '     |_ <1>
    '     |_ <2>
    '     |_ <3>
    '     |_ <4>
    '     |_ <5> <- MyChildNode points to this Node

递归!

Private Function BuildTreeOf(ByRef CurrentXMLNode As SomeXMLNode) As TreeNode
    Dim CurrentTreeNode As New TreeNode(CurrentXMLNode.Name)

    For Each ChildXML As SomeXMLNode In CurrentXMLNode.Children
        CurrentTreeNode.Add(BuildTreeOf(ChildXML))
    Next

    Return CurrentTreeNode
End Function

' Call :

TreeView1.BeginUpdate()
TreeView1.Nodes.Add(BuildTreeOf(tn))
' Where tn is the topmost parent of your XML data as SomeXMLNode.
TreeView1.EndUpdate()

我已经放置了一个 SomeXMLNode 类型的占位符对象,它应该有一个 .Children 属性,它是与我使用自己的 XML 解析器相同类型的对象的(排序)集合,但我已经失去了对本机 dotNet 的跟踪关于 XML 的对象。尝试使用您正在操作的 XML 对象来调整上述内容。

【讨论】:

    猜你喜欢
    • 2016-03-13
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多