我需要在不使用SelectedNode属性的情况下填充TreeView 此TreeView必须包含列表框中的项(在大多数情况下是字符串)。应该像在简单的二叉树中一样对这些项进行排序。根节点是第一个项目。如果重复某些项目,则应增加此项目的计数,并且输出应该类似于 - >
- 第2项
| - 私人
| - 苹果
或类似的东西。在此示例中,项是根,苹果应该是左子项,私有 - 右侧。
我找到了一个可能的解决方案here,但我不知道如何做到这一切:/
这是我的代码:
public void populateBaseNodes()
{
int i;
treeView1.Nodes.Clear();
treeView1.BeginUpdate();
for (i = 0; i < L.Count(); i++)
{
if (L[i].level == 0)
{
treeView1.Nodes.Add(L[i].NodeText, L[i].NodeText);
treeView1.Nodes[treeView1.Nodes.Count - 1].Tag = L[i];
}
}
for (i = 0; i < treeView1.Nodes.Count; i++)
populateChilds(treeView1.Nodes[i]);
treeView1.EndUpdate();
treeView1.Refresh();
}
public void populateChilds(TreeNode parentNode)
{
kData parentRed = (kData)parentNode.Tag;
for (int i = parentRed.index + 1; i < L.Count; i++)
{
if (L[i].level == (parentRed.level + 1))
{
parentNode.Nodes.Add(L[i].NodeText, L[i].NodeText);
parentNode.Nodes[parentNode.Nodes.Count - 1].Tag = L[i];
populateChilds(parentNode.Nodes[parentNode.Nodes.Count - 1]);
}
if (L[i].level <= parentRed.level) break;
}
}
这是我填充树视图的按钮的代码 - &gt;
string line;
L = new List<kData>();
for (int i = 0; i < listBox1.Items.Count; i++)
{
line = listBox1.Items[i].ToString();
L.Add(new kData());
L[i].index = i;
L[i].level = i;
ind = line.IndexOf(':');
L[i].NodeText = line.Substring(0, ind);
}
populateBaseNodes();
这是 kData 类 - &gt;
public class kData
{
public int level;
public int index;
public string NodeText;
};
List<kData> L;
我会感谢任何帮助:)