从列表框填充TreeView而不使用SelectedNode C#

时间:2017-11-04 16:40:23

标签: c# winforms listbox treeview

我需要在不使用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;

我会感谢任何帮助:)

0 个答案:

没有答案