如何定义一个指向TreeView 根节点的指针?

lhw7791086 2013-05-07 09:05:25
有一个TreeView,里面有若干节点,现在想把它存储下来,能否通过声明一个指针,使它指向该TreeView的根节点,以后就通过该指针找到该TreeView,获得它的整个结构。不知道这样是否可行?若可行,该如何声明这个指针?
...全文
265 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
gx831218 2013-05-08
  • 打赏
  • 举报
回复
引用 18 楼 lhw7791086 的回复:
[quote=引用 17 楼 gx831218 的回复:] [quote=引用 10 楼 lhw7791086 的回复:] [quote=引用 8 楼 gx831218 的回复:] 举个例子吧,就不用VS了。 先构建根节点以下的TreeNode TreeNode treeNodechild = new TreeNode(); treeNodechild .add(new TreeNode()); //在子节点下构建他的子节点。 Hashtable hashtable = new Hashtable(); hashtable.add("treeNodeChild",treeNodechild); //姑且使用一个哈希保存这个treenode treeView1.Nodes.Add(hashtable["treeNodechild "]);//最后一步添加这个treenode。 treeView2.Nodes.Add(hashtable["treeNodechild "]);//另一个控件引用这个treenode。
有个疑问: hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?[/quote]首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。[/quote] 那如果我对该树结构的根节点进行操作: hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?[/quote]是的,因为定义的是全局的函数,改变的是全局的对象。
gx831218 2013-05-08
  • 打赏
  • 举报
回复
"/.3/fedora-epel" "/.3/fedora-epel/beta" "/.3/fedora-epel/5" "/.3/fedora-epel/5/SRPMS" "/etc" "/.3" "/open/CAS" "/open/Aircrack-ng" 根据你提供的这个目录,可以先进行排序,确保子节点一定在父节点后面。(原理就不说了)在构建节点时,把该节点添加进hashtable,同时通过hashtable找到他的父节点,把他添加进父节点。这样构建完成后,每一个hashtable["***"]内的元素都是该节点及他所有的子节点。定义为全局后,可以随时调用任何一个节点。当然浪费些内存,但是调用的效率还是可以保证的,毕竟hashtable的速度不错。 这样说是否明白了?
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 17 楼 gx831218 的回复:
[quote=引用 10 楼 lhw7791086 的回复:] [quote=引用 8 楼 gx831218 的回复:] 举个例子吧,就不用VS了。 先构建根节点以下的TreeNode TreeNode treeNodechild = new TreeNode(); treeNodechild .add(new TreeNode()); //在子节点下构建他的子节点。 Hashtable hashtable = new Hashtable(); hashtable.add("treeNodeChild",treeNodechild); //姑且使用一个哈希保存这个treenode treeView1.Nodes.Add(hashtable["treeNodechild "]);//最后一步添加这个treenode。 treeView2.Nodes.Add(hashtable["treeNodechild "]);//另一个控件引用这个treenode。
有个疑问: hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?[/quote]首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。[/quote] 那如果我对该树结构的根节点进行操作: hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?
gx831218 2013-05-08
  • 打赏
  • 举报
回复
引用 10 楼 lhw7791086 的回复:
[quote=引用 8 楼 gx831218 的回复:] 举个例子吧,就不用VS了。 先构建根节点以下的TreeNode TreeNode treeNodechild = new TreeNode(); treeNodechild .add(new TreeNode()); //在子节点下构建他的子节点。 Hashtable hashtable = new Hashtable(); hashtable.add("treeNodeChild",treeNodechild); //姑且使用一个哈希保存这个treenode treeView1.Nodes.Add(hashtable["treeNodechild "]);//最后一步添加这个treenode。 treeView2.Nodes.Add(hashtable["treeNodechild "]);//另一个控件引用这个treenode。
有个疑问: hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?[/quote]首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 13 楼 guoshan88 的回复:
如果你有几个固定的node节点,你就用TreeNode tn1;TreeNode tn2;TreeNode tn3。。。等等你声明多个成员变量,然后构建树的时候这些节点不会消失的!你然后你可以对他们分级,然后可以灵活的添加删除节点
额,其实是做这个: 现有许多string类型的数据,都是表示目录的,比如: "/.3/fedora-epel" "/.3/fedora-epel/beta" "/.3/fedora-epel/5" "/.3/fedora-epel/5/SRPMS" "/etc" "/.3" "/open/CAS" "/open/Aircrack-ng" ... ... 现在要根据这些字符串,动态生成一个目录结构,使用treeView控件来显示该结构。 假设已经完成了一个目录结构,现在需要将已经生成好的目录保存下来,然后清空该treeView控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多)
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 9 楼 gx831218 的回复:
或者使用Hashtable 保存每一个treenode。 用的时候直接 hashtable["treeNodechild "] 就可以调用到任何的treenode了。
额,其实是做这个: 现有许多string类型的数据,都是表示目录的,比如: "/.3/fedora-epel" "/.3/fedora-epel/beta" "/.3/fedora-epel/5" "/.3/fedora-epel/5/SRPMS" "/etc" "/.3" "/open/CAS" "/open/Aircrack-ng" ... ... 现在要根据这些字符串,动态生成一个目录结构,使用treeView控件来显示该结构。 假设已经完成了一个目录结构,现在需要将已经生成好的目录保存下来,然后清空该treeView控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多)
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 11 楼 dongxinxi 的回复:
啥意思?把你的trieview定义成成员变量,保持一个引用,只要程序不退出,不就一直可以使用吗? 难不成你是想程序退出后,再进去直接加载这样的持久化?xml或者数据库,或者序列化成二进制文件都可以
额,其实是做这个: 现有许多string类型的数据,都是表示目录的,比如: "/.3/fedora-epel" "/.3/fedora-epel/beta" "/.3/fedora-epel/5" "/.3/fedora-epel/5/SRPMS" "/etc" "/.3" "/open/CAS" "/open/Aircrack-ng" ... ... 现在要根据这些字符串,动态生成一个目录结构,使用treeView控件来显示该结构。 假设已经完成了一个目录结构,现在需要将已经生成好的目录保存下来,然后清空该treeView控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多)
叨叨猫 2013-05-08
  • 打赏
  • 举报
回复 1
如果你有几个固定的node节点,你就用TreeNode tn1;TreeNode tn2;TreeNode tn3。。。等等你声明多个成员变量,然后构建树的时候这些节点不会消失的!你然后你可以对他们分级,然后可以灵活的添加删除节点
  • 打赏
  • 举报
回复
如果是web程序可放到application session或者cache中
  • 打赏
  • 举报
回复
啥意思?把你的trieview定义成成员变量,保持一个引用,只要程序不退出,不就一直可以使用吗? 难不成你是想程序退出后,再进去直接加载这样的持久化?xml或者数据库,或者序列化成二进制文件都可以
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 8 楼 gx831218 的回复:
举个例子吧,就不用VS了。 先构建根节点以下的TreeNode TreeNode treeNodechild = new TreeNode(); treeNodechild .add(new TreeNode()); //在子节点下构建他的子节点。 Hashtable hashtable = new Hashtable(); hashtable.add("treeNodeChild",treeNodechild); //姑且使用一个哈希保存这个treenode treeView1.Nodes.Add(hashtable["treeNodechild "]);//最后一步添加这个treenode。 treeView2.Nodes.Add(hashtable["treeNodechild "]);//另一个控件引用这个treenode。
有个疑问: hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?
gx831218 2013-05-08
  • 打赏
  • 举报
回复 1
或者使用Hashtable 保存每一个treenode。 用的时候直接 hashtable["treeNodechild "] 就可以调用到任何的treenode了。
gx831218 2013-05-08
  • 打赏
  • 举报
回复
举个例子吧,就不用VS了。 先构建根节点以下的TreeNode TreeNode treeNodechild = new TreeNode(); treeNodechild .add(new TreeNode()); //在子节点下构建他的子节点。 Hashtable hashtable = new Hashtable(); hashtable.add("treeNodeChild",treeNodechild); //姑且使用一个哈希保存这个treenode treeView1.Nodes.Add(hashtable["treeNodechild "]);//最后一步添加这个treenode。 treeView2.Nodes.Add(hashtable["treeNodechild "]);//另一个控件引用这个treenode。
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 5 楼 gx831218 的回复:
TreeNode是一个单独的对象,下次直接在新的根节点上添加这个TreeNode就可以了啊,还是我没有听懂你在说什么? 如果需要保存,就使用一个容器吧TreeNode装起来呗。下次使用在取出来。
就使用一个容器吧TreeNode装起来呗。下次使用在取出来。 可否给点代码示例,不是太明白,谢谢!
gx831218 2013-05-08
  • 打赏
  • 举报
回复
是否应该先把 除了根节点的TreeNode构建完成,保存进容器,可以对不同的根节点添加该TreeNode。
gx831218 2013-05-08
  • 打赏
  • 举报
回复
TreeNode是一个单独的对象,下次直接在新的根节点上添加这个TreeNode就可以了啊,还是我没有听懂你在说什么? 如果需要保存,就使用一个容器吧TreeNode装起来呗。下次使用在取出来。
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 3 楼 u010383116 的回复:
不是很理解你的话, treeView1 就像是你牵牛的那条绳,而 “treeView1控件”就像牛一样被你买来了,你要牵几根绳随便你,但牛目前只有一只,因为你只new了一下呵呵。当你所有的线都断时,你的牛也就被回收了
可能我是新手,所以有些概念理解不是太明白,我这样描述吧:
TreeNode tn = new TreeNode();  //有一控件treeView1,里面建好了一个根节点tn(根目录)
tn.Text = "根目录";
treeView1.Nodes.Add(tn);

TreeNode tns = treeView1.Nodes[0]; //下面针对这个树进行各种添加节点操作
//各种节点添加
tns.Nodes.Add(item);
//......
现在这个树已经建立完成了,我的意思是如何将这个已经建好的树完整保存下来?因为下一次循环的时候该treeView1控件又要接收一个新的根节点,所以现在需要将这个已建好的树保存到某一个地方,不知道如何保存这个树? 有一个Clone()的方法,比如treeView1.Nodes[0].Clone()是把该控件Nodes[0]这个节点以及它的所有子孙节点复制到另外一个节点上,但是不太适合我的要求。求教有木有更好的办法?
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 22 楼 guoshan88 的回复:
你的这个好麻烦,我不太清楚了!帮顶吧,做的好麻烦
恩,好吧,我再想想办法,谢谢了!
lhw7791086 2013-05-08
  • 打赏
  • 举报
回复
引用 21 楼 gx831218 的回复:
[quote=引用 18 楼 lhw7791086 的回复:] [quote=引用 17 楼 gx831218 的回复:] [quote=引用 10 楼 lhw7791086 的回复:] [quote=引用 8 楼 gx831218 的回复:] 举个例子吧,就不用VS了。 先构建根节点以下的TreeNode TreeNode treeNodechild = new TreeNode(); treeNodechild .add(new TreeNode()); //在子节点下构建他的子节点。 Hashtable hashtable = new Hashtable(); hashtable.add("treeNodeChild",treeNodechild); //姑且使用一个哈希保存这个treenode treeView1.Nodes.Add(hashtable["treeNodechild "]);//最后一步添加这个treenode。 treeView2.Nodes.Add(hashtable["treeNodechild "]);//另一个控件引用这个treenode。
有个疑问: hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?[/quote]首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。[/quote] 那如果我对该树结构的根节点进行操作: hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?[/quote]是的,因为定义的是全局的函数,改变的是全局的对象。[/quote] 好的,我先试试看,谢谢了!
叨叨猫 2013-05-08
  • 打赏
  • 举报
回复
你的这个好麻烦,我不太清楚了!帮顶吧,做的好麻烦
加载更多回复(3)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧