在VB.NET中,如何以这种格式转换多行字符串......
Area 52
Sector 19
Stage 7
Library 15
Sector 32
Link 30
Portal 20`
...(每个缩进是一个 vbTab ),进入如下所示的树视图控件:
我认为递归函数可以正常工作,但我不知道如何创建一个正常工作的函数。
答案 0 :(得分:2)
首先,你需要解析你的字符串。创建一个将存储数据的对象。在伪代码中:
class Node
Text as string
Level as Integer
end class
现在,您需要填写这些节点的列表
dim lines() as string = myString.split(Environment.NewLine)
迭代并调查行
Dim nodeList as new List(Of Node)()
for each line as string in lines
dim lenBefore as integer = line.Length
dim lenAfter as integer = line.Trim().Length
dim n as new Node()
n.Text = line.Trim()
n.Level = (lenBefore - lenAfter) / numberOfEmptySpacesInIndent 'for example indent 4 spaces
next
现在,您已拥有该列表,您需要将其转换为Treeview
dim previousTreeNode as TreeNode
dim previousNode as Node
for each n as Node In nodeList
' here create new tree node using n.Text
dim newTreeNode = .....
if n.Level = 0 then
tv.Nodes.Add(newTreeNode)
else if n.Level = previousNode.Level Then
previousTreeNode.Parent.Nodes.Add(newTreeNode)
else if n.Level > previousNode.Level Then
previousTreeNode.Nodes.Add(newTreeNode)
else if n.Level < previousNode.Level Then
previousTreeNode.Parent.Parent.Nodes.Add(newTreeNode)
end if
previousNode = n
previousTreeNode = newTreeNode
next
这应该这样做。虽然,这是伪代码,我还没有测试任何东西。如果你想要递归,你需要在行之间建立关系。此代码基于缩进并且没有任何关系。我猜,有可能,一旦你获得了基于缩进的级别,你就可以遍历节点列表以找到父级并添加属性。是的,如果您创建该对象结构,则很容易将其复制到树节点中。但那是双重工作。