问题:现有一有序的string类型数据,例如 aaa bbb ccc ddd eee......
某一treeview已存在根节点,需要将上面的aaa bbb ccc ddd eee......按顺序添加为子节点(不是同一级的,bbb是aaa的子节点、ccc是bbb的子节点,以此类推)我试了试:string数据的个数是可以确定的,添加采用:
TreeNode tn = new TreeNode();
tn.Text = "string的名字";
根节点.Nodes.Add(tn); //可实现添加第二级
但是再往后就不知道如何添加后面几级的子节点了,因为不知道如何获取前一级的子节点,也就是XXX.Nodes.Add(新添加的子节点) 这里的XXX不知道如何表示?而且如果采用循环的话,每次都要用
TreeNode xx = new TreeNode() //创建新的TreeNode,这样会重复吧
有个treeView.Nodes[0].Nodes[0].Nodes[0]......可以按顺序获取特定子节点,但是这样该取多少次呢?
我C#的确是刚接触,不知道问题陈述的清不清楚。求教各位前辈,不知道有什么好思路?谢谢!

解决方案 »

  1.   

    string[] s = new string[] { "aaa", "bbb", "ccc", "ddd", "eee" };
    treeView1.Nodes.Add(s[0]);
    TreeNode tn = treeView1.Nodes[0];
    foreach (var item in s.Skip(1))
    {
        tn.Nodes.Add(item);
        tn = tn.Nodes[0];
    }
      

  2.   

    string[] s = new string[] { "aaa", "bbb", "ccc", "ddd", "eee" };
    treeView1.Nodes.Add(s[0]);
    TreeNode tn = treeView1.Nodes[0];
    foreach (var item in s.Skip(1))
    {
        tn = tn.Nodes.Add(item);
    }
    偷个懒改一下,错了也是1楼的。意思是Nodes.Add返回的就是添加的节点。
      

  3.   

    还可以简化string[] s = new string[] { "aaa", "bbb", "ccc", "ddd", "eee" };
    TreeNodeCollection nodes = treeView1.Nodes;
    foreach (var item in s)
    {
        nodes = nodes.Add(item).Nodes;
    }我是有点强迫症了。
      

  4.   

    我也是新人,还没学到这呢。不知道能不能帮上你!
    我是这么想的,VS编译器上拖TreeView控件后,属性里可以手动添加Nodes集合。
    我先按你的要求,添加了3个子节点。然后看下Designer.cs里编译器为我们自动添加的代码。
    /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("节点2");
                System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("节点1", new System.Windows.Forms.TreeNode[] {
                treeNode1});
                System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("节点0", new System.Windows.Forms.TreeNode[] {
                treeNode2});
                this.panel1 = new System.Windows.Forms.Panel();
                this.treeView1 = new System.Windows.Forms.TreeView();
                this.panel1.SuspendLayout();
                this.SuspendLayout();
                // 
                // panel1
                // 
                this.panel1.Controls.Add(this.treeView1);
                this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
                this.panel1.Location = new System.Drawing.Point(0, 0);
                this.panel1.Name = "panel1";
                this.panel1.Size = new System.Drawing.Size(282, 255);
                this.panel1.TabIndex = 0;
                // 
                // treeView1
                // 
                this.treeView1.Location = new System.Drawing.Point(12, 12);
                this.treeView1.Name = "treeView1";
                treeNode1.Name = "节点2";
                treeNode1.Text = "节点2";
                treeNode2.Name = "节点1";
                treeNode2.Text = "节点1";
                treeNode3.Name = "节点0";
                treeNode3.Text = "节点0";
                this.treeView1.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
                treeNode3});
                this.treeView1.Size = new System.Drawing.Size(258, 231);
                this.treeView1.TabIndex = 0;
    优化下代码:
    TreeNode treeNode1 = new TreeNode("节点2");
                TreeNode treeNode2 = new TreeNode("节点1", new TreeNode[] {treeNode1});
                TreeNode treeNode3 = new TreeNode("节点0", new TreeNode[] {treeNode2});
                TreeView treeView1 = new TreeView();
                treeView1.Location = new System.Drawing.Point(12, 12);
                treeView1.Name = "treeView1";
                treeNode1.Name = "节点2";
                treeNode1.Text = "节点2";
                treeNode2.Name = "节点1";
                treeNode2.Text = "节点1";
                treeNode3.Name = "节点0";
                treeNode3.Text = "节点0";
                treeView1.Nodes.AddRange(new TreeNode[] {treeNode3});
                treeView1.Size = new System.Drawing.Size(258, 231);
                treeView1.Parent = panel1;递归不太熟,那就for循环吧。初学者代码一大坨,呵呵!
    private void Form1_Load(object sender, EventArgs e)
            {
                string[] strs = { "aaa", "bbb", "ccc", "ddd", "fff" };
                TreeView treeView1 = new TreeView();
                treeView1.Name = "treeView1";
                treeView1.Location = new System.Drawing.Point(12, 12);
                treeView1.Size = new System.Drawing.Size(258, 231);
                treeView1.Parent = panel1;
                TreeNode[] treenodes = new TreeNode[strs.Length];
                treenodes[0] = new TreeNode();     
                treenodes[0].Name = strs[strs.Length - 1];
                treenodes[0].Text = strs[strs.Length - 1];
                for (int i=1; i<strs.Length; i++)
                {
                    treenodes[i] = new TreeNode();
                    treenodes[i].Name = strs[strs.Length - i - 1];
                    treenodes[i].Text = strs[strs.Length - i - 1];
                    treenodes[i].Nodes.Add(treenodes[i - 1]);
                }
                treeView1.Nodes.AddRange(new TreeNode[] { treenodes[strs.Length - 1] });
            }
      

  5.   


    感谢,这个问题解决了,请看具体问题http://bbs.csdn.net/topics/390404551?page=1#post-394038186
      

  6.   


    感谢,这个问题解决了,请看具体问题 http://bbs.csdn.net/topics/390404551?page=1#post-394038186