有一个TreeView,里面有若干节点,现在想把它存储下来,能否通过声明一个指针,使它指向该TreeView的根节点,以后就通过该指针找到该TreeView,获得它的整个结构。不知道这样是否可行?若可行,该如何声明这个指针?TreeView指针存储

解决方案 »

  1.   

     TreeView tv ,其实这个跟c里的指针差不多吧,不过他更安全。tv是分配在栈上而指向托管堆上TreeView 对象的引用.要不是为了操作内存块,c#上用不到c概念的指针吧。不知我的理解是否正确
      

  2.   


    TreeView申明之后,该如何用它来存储某个树呢?比如我现在已经存在一个treeView1控件,里面已经存在了一个树结构,该怎么把treeView1中的树存进去呢?是整个存进去还是只能存它的根节点?
      

  3.   

    不是很理解你的话, treeView1 就像是你牵牛的那条绳,而 “treeView1控件”就像牛一样被你买来了,你要牵几根绳随便你,但牛目前只有一只,因为你只new了一下呵呵。当你所有的线都断时,你的牛也就被回收了 
      

  4.   


    可能我是新手,所以有些概念理解不是太明白,我这样描述吧:
    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]这个节点以及它的所有子孙节点复制到另外一个节点上,但是不太适合我的要求。求教有木有更好的办法?
      

  5.   

    TreeNode是一个单独的对象,下次直接在新的根节点上添加这个TreeNode就可以了啊,还是我没有听懂你在说什么?
    如果需要保存,就使用一个容器吧TreeNode装起来呗。下次使用在取出来。
      

  6.   

    是否应该先把 除了根节点的TreeNode构建完成,保存进容器,可以对不同的根节点添加该TreeNode。
      

  7.   


    就使用一个容器吧TreeNode装起来呗。下次使用在取出来。
    可否给点代码示例,不是太明白,谢谢!
      

  8.   

    举个例子吧,就不用VS了。
    先构建根节点以下的TreeNode
    TreeNode treeNodechild = new TreeNode();
    treeNodechild .add(new TreeNode());       //在子节点下构建他的子节点。Hashtable hashtable = new Hashtable();
    hashtable.add("treeNodeChild",treeNodechild);  //姑且使用一个哈希保存这个treenodetreeView1.Nodes.Add(hashtable["treeNodechild "]);//最后一步添加这个treenode。
    treeView2.Nodes.Add(hashtable["treeNodechild "]);//另一个控件引用这个treenode。
      

  9.   

    或者使用Hashtable 保存每一个treenode。
    用的时候直接   hashtable["treeNodechild "]  就可以调用到任何的treenode了。
      

  10.   


    有个疑问:
    hashtable.add("treeNodeChild",treeNodechild);    将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?
      

  11.   

    啥意思?把你的trieview定义成成员变量,保持一个引用,只要程序不退出,不就一直可以使用吗?
    难不成你是想程序退出后,再进去直接加载这样的持久化?xml或者数据库,或者序列化成二进制文件都可以
      

  12.   

    如果是web程序可放到application session或者cache中
      

  13.   

    如果你有几个固定的node节点,你就用TreeNode tn1;TreeNode tn2;TreeNode tn3等等你声明多个成员变量,然后构建树的时候这些节点不会消失的!你然后你可以对他们分级,然后可以灵活的添加删除节点
      

  14.   


    额,其实是做这个:
    现有许多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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多)
      

  15.   


    额,其实是做这个:
     现有许多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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多) 
      

  16.   


    额,其实是做这个:
     现有许多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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多) 
      

  17.   


    有个疑问:
    hashtable.add("treeNodeChild",treeNodechild);    将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。
      

  18.   


    有个疑问:
    hashtable.add("treeNodeChild",treeNodechild);    将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:
    hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?
      

  19.   

     "/.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的速度不错。
    这样说是否明白了?
      

  20.   


    有个疑问:
    hashtable.add("treeNodeChild",treeNodechild);    将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:
    hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?是的,因为定义的是全局的函数,改变的是全局的对象。
      

  21.   


    有个疑问:
    hashtable.add("treeNodeChild",treeNodechild);    将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:
    hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?是的,因为定义的是全局的函数,改变的是全局的对象。好的,我先试试看,谢谢了!