问题:现有一有序的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#的确是刚接触,不知道问题陈述的清不清楚。求教各位前辈,不知道有什么好思路?谢谢!
某一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#的确是刚接触,不知道问题陈述的清不清楚。求教各位前辈,不知道有什么好思路?谢谢!
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];
}
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返回的就是添加的节点。
TreeNodeCollection nodes = treeView1.Nodes;
foreach (var item in s)
{
nodes = nodes.Add(item).Nodes;
}我是有点强迫症了。
我是这么想的,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] });
}
感谢,这个问题解决了,请看具体问题http://bbs.csdn.net/topics/390404551?page=1#post-394038186
感谢,这个问题解决了,请看具体问题 http://bbs.csdn.net/topics/390404551?page=1#post-394038186