如何定义一个指向TreeView 根节点的指针? 有一个TreeView,里面有若干节点,现在想把它存储下来,能否通过声明一个指针,使它指向该TreeView的根节点,以后就通过该指针找到该TreeView,获得它的整个结构。不知道这样是否可行?若可行,该如何声明这个指针?TreeView指针存储 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 TreeView tv ,其实这个跟c里的指针差不多吧,不过他更安全。tv是分配在栈上而指向托管堆上TreeView 对象的引用.要不是为了操作内存块,c#上用不到c概念的指针吧。不知我的理解是否正确 TreeView申明之后,该如何用它来存储某个树呢?比如我现在已经存在一个treeView1控件,里面已经存在了一个树结构,该怎么把treeView1中的树存进去呢?是整个存进去还是只能存它的根节点? 不是很理解你的话, 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]这个节点以及它的所有子孙节点复制到另外一个节点上,但是不太适合我的要求。求教有木有更好的办法? TreeNode是一个单独的对象,下次直接在新的根节点上添加这个TreeNode就可以了啊,还是我没有听懂你在说什么?如果需要保存,就使用一个容器吧TreeNode装起来呗。下次使用在取出来。 是否应该先把 除了根节点的TreeNode构建完成,保存进容器,可以对不同的根节点添加该TreeNode。 就使用一个容器吧TreeNode装起来呗。下次使用在取出来。可否给点代码示例,不是太明白,谢谢! 举个例子吧,就不用VS了。先构建根节点以下的TreeNodeTreeNode 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。 或者使用Hashtable 保存每一个treenode。用的时候直接 hashtable["treeNodechild "] 就可以调用到任何的treenode了。 有个疑问:hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次? 啥意思?把你的trieview定义成成员变量,保持一个引用,只要程序不退出,不就一直可以使用吗?难不成你是想程序退出后,再进去直接加载这样的持久化?xml或者数据库,或者序列化成二进制文件都可以 如果是web程序可放到application session或者cache中 如果你有几个固定的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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多) 额,其实是做这个: 现有许多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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多) 额,其实是做这个: 现有许多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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多) 有个疑问:hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。 有个疑问:hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来? "/.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的速度不错。这样说是否明白了? 有个疑问:hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?是的,因为定义的是全局的函数,改变的是全局的对象。 有个疑问:hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?是的,因为定义的是全局的函数,改变的是全局的对象。好的,我先试试看,谢谢了! C# 如何获取控件的hdc呢? 好大一枚难题,求指教!(xml查询的) DataTable更改列名称 高人指点一下,dataGridView1绑定不显示 但调试已然有数据的,这代码是肿么了? webbrowswer的2D-Position命令以及如何插入表格! ArrayList 改变其中一个值的问题 局域网做的QQ怎么放到广域网上去? 我在哪裡可以下載到MSDN? 如何遍历逐个执行自己写的N个函数 C#中有没有像VB中DoEvents类似的函数 有没有人帮忙看下, c#事件回调,请教一个
TreeView申明之后,该如何用它来存储某个树呢?比如我现在已经存在一个treeView1控件,里面已经存在了一个树结构,该怎么把treeView1中的树存进去呢?是整个存进去还是只能存它的根节点?
可能我是新手,所以有些概念理解不是太明白,我这样描述吧:
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]这个节点以及它的所有子孙节点复制到另外一个节点上,但是不太适合我的要求。求教有木有更好的办法?
如果需要保存,就使用一个容器吧TreeNode装起来呗。下次使用在取出来。
就使用一个容器吧TreeNode装起来呗。下次使用在取出来。
可否给点代码示例,不是太明白,谢谢!
先构建根节点以下的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。
用的时候直接 hashtable["treeNodechild "] 就可以调用到任何的treenode了。
有个疑问:
hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?
难不成你是想程序退出后,再进去直接加载这样的持久化?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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多)
额,其实是做这个:
现有许多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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多)
额,其实是做这个:
现有许多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控件,以便接收另外一个目录结构,现在的问题就是:已生成好的目录保存在什么地方?而且需要的时候还能再整个调出来?(目录数量很多)
有个疑问:
hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。
有个疑问:
hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:
hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?
"/.3/fedora-epel/beta"
"/.3/fedora-epel/5"
"/.3/fedora-epel/5/SRPMS"
"/etc"
"/.3"
"/open/CAS"
"/open/Aircrack-ng" 根据你提供的这个目录,可以先进行排序,确保子节点一定在父节点后面。(原理就不说了)在构建节点时,把该节点添加进hashtable,同时通过hashtable找到他的父节点,把他添加进父节点。这样构建完成后,每一个hashtable["***"]内的元素都是该节点及他所有的子节点。定义为全局后,可以随时调用任何一个节点。当然浪费些内存,但是调用的效率还是可以保证的,毕竟hashtable的速度不错。
这样说是否明白了?
有个疑问:
hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:
hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?是的,因为定义的是全局的函数,改变的是全局的对象。
有个疑问:
hashtable.add("treeNodeChild",treeNodechild); 将该treeNodeChild节点保存到容器的同时,它的所有子孙节点是否也自动记录下来了?还是说需要每一个都手动保存一次?首先,treeNode是个对象,就是引用类型,对他的操作会保存在hashtable内,相当于,hashtable.add("treeNodeChild")调用的是他及他的所有子节点。不用每次都保存,当然,hashtable应该是全局的。那如果我对该树结构的根节点进行操作:
hashtable.add("treeRoot",treeRoot);是否可以实现将树根节点以及它的所有子孙节点都保存(其实就是保存了整个树),以后对该树再进行一些添加、删除节点操作,都会自动保存下来?是的,因为定义的是全局的函数,改变的是全局的对象。好的,我先试试看,谢谢了!