我做了一个小系统,用到了TreeNode。我是这样想的,在前台图形里面关联TreeNode,然后通过连接,把TreeNode添加到TreeView里,形成一个树结构。在TreeNode的tag里面,是一个自定义Button,这个Button里面有个GenerateCode虚方法。所有的Button继承自我写的一个公共基类。这样,我只要通过遍历树,顺次调用Button的Generate方法,就能生成一系列代码。但是我在把TreeNode添加到TreeView的过程中,总是有问题。现在没法动态建立树枝,只能一条线到底,变成了一个链表。现在我很困惑,这个问题搞不定了。如果有能搞定的朋友希望可以帮帮忙。我的QQ283489754,MSN:[email protected]如果搞定的话,分不是问题,先谢谢大家
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;using System.Web;namespace Robot
{
//CodeTree类:
//说明 :CodeTree类主要是用于操作代码树,它的内容包括:
// 创建代码树
// 在代码树中添加结点
// 从代码树中删除结点
// 遍历代码树
// 从代码树中寻找结点 class CodeTree
{
public CodeTree()
{
tv = new TreeView(); NewTreeNode = new TreeNode[1000];
root = new TreeNode("root"); tv.Nodes.Add(root); current = new TreeNode("current");
} //在树中的current结点下添加一个结点
public TreeNode AddNode(CybotButton cb)
{
//新建一个数组
try
{
++i;
NewTreeNode[i] = new TreeNode(i.ToString());
NewTreeNode[i].Text = i.ToString();
NewTreeNode[i].Tag = cb;
this.current.Nodes.Add(NewTreeNode[i]);
}
catch (Exception e)
{
MessageBox.Show(e.Data.ToString());
}
return NewTreeNode[i];
} //在树中删除掉current结点
public void DeleteNode(TreeNode current)
{
//移除当前结点
tv.Nodes.Remove(current);
} //遍历树,产生代码
public String TraversalTree()
{
//深度优先遍历
String str = ""; str = ShowAllNodes(this.tv.Nodes);
return str;
} //采用递归的方式遍历树,输出代码
String ShowAllNodes(TreeNodeCollection tv)
{
strCode = "int main()\n{\n";
foreach (TreeNode node in tv)
{
strCode += PrintCode(node) ;
if (node.Nodes.Count > 0)
{
ShowAllNodes(node.Nodes);
}
}
return strCode;
}
//输出单个按钮的代码
public String PrintCode(TreeNode tn)
{
//这里TreeNode始终没有变
CybotButton cb = (CybotButton)tn.Tag;
String str = cb.GenerateCode();
return str;
} //在树中寻找包含有按钮cb的结点,并返回这个结点
public TreeNode FindNode(TreeView tv,CybotButton cb)
{
TreeNode tnRet = new TreeNode("tnRet");
foreach (TreeNode tn in tv.Nodes)
{
if ((CybotButton)(tn.Tag) == cb)
{
tnRet = tn;
this.current = tnRet;
break;
}
}
return tnRet;
} //将以root为根的树整个删掉
public bool DeleteTree()
{
//移除根结点及其所有子结点
this.tv.Nodes.Remove(root);
return true;
}
public TreeNode[] NewTreeNode;
public String strCode;
public TreeNode root;
private TreeNode current;
public TreeView tv;
public static int i = 0;
}
}
{
//新建一个数组
try
{
++i;
NewTreeNode[i] = new TreeNode(i.ToString());
NewTreeNode[i].Text = i.ToString();
NewTreeNode[i].Tag = cb;
parentNode.Nodes.Add(NewTreeNode[i]);
}
catch (Exception e)
{
MessageBox.Show(e.Data.ToString());
}
return NewTreeNode[i];
}
TreeNode secNode1 = new TreeNode();//二级节点
TreeNode secNode2 = new TreeNode();//二级节点rootNode.Nodes.Add(secNode1);
rootNode.Nodes.Add(secNode2);这样也不可以吗?你不要粘你的全部代码,我看到头晕。
贴出思想就可以了