说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何保存控件里的内容?

编辑:说三道四文库 发布时间:2017-12-14 02:40
HTML文档下载 WORD文档下载 PDF文档下载
我在form上添加了一个treeview的控件,能生成树状结构,但是我想将其保存起来,等下次打开这个form的时候,我可以将其调出来,应该怎么做呢?
我通常都保存到数据库里边
存储/恢复treeview的例子:
http://www.zjonline.com.cn/vbbible/software/program/code/control/treeview.zip



建议保存为xml文件,理由是二者都是树型结构:

保存节点数据
  TreeView本身没有提供保存节点数据的Save方法,也没有从文件读取节点数据的Load方法,这些方法都要我们自己实现。保存TreeView数据最简单的形式是XML文件,因为层次型结构是XML固有的特征。我们将用MSXML组件来创建和保存XML文档,VB6默认不带这个组件,但你可以从MSDN下载。

  在VB中使用MSXML组件首先要把它加入工程:打开“工程”菜单,选择“引用”,在对话框中选中“Microsoft XML v3.0”组件。
  点击“保存”按钮,控件的当前数据将被保存为一个“扁平”XML文件(每一个节点保存为一个XML元素,节点的属性作为XML元素的属性保存,节点之间的从属关系通过元素的ParentKey属性得以体现。)下面是“保存”按钮点击事件句柄的代码。
Private Sub bttnSave_Click()
 Dim xmlDoc As DOMDocument30
 Set xmlDoc = New DOMDocument30

 Dim ElementNode As IXMLDOMElement
 Dim RootElementNode As IXMLDOMElement
 Set ElementNode = xmlDoc.createElement("NODES")
 Set RootElementNode = xmlDoc.appendChild(ElementNode)

 Dim TNode As Node
 Dim i As Integer
 For i = 1 To SmartTreeView.Nodes.Count
  Set TNode = SmartTreeView.Nodes(i)
  Set ElementNode = xmlDoc.createElement("NODE")
  ElementNode.setAttribute "Caption", TNode.Text
  ElementNode.setAttribute "Key", TNode.Key
  ElementNode.setAttribute "Tag", TNode.Tag
  If TNode.Parent Is Nothing Then
   ElementNode.setAttribute "ParentKey", ""
  Else
   ElementNode.setAttribute "ParentKey", TNode.Parent.Key
  End If
  RootElementNode.appendChild ElementNode
 Next
 xmlDoc.save ("C:\XMLNodes.xml")
End Sub 

  bttnSave_Click事件句柄首先创建根元素,然后用一个For...Next循环遍历TreeView控件的节点集合,每次循环创建一个新的元素,提取节点的属性作为XML元素的属性。

  用“保存”按钮生成的XML文档虽然包含了重构TreeView所需的所有信息,但XML文档本身未能直观地显示出节点之间的从属关系。点击“保存(嵌套)”按钮可将TreeView的节点数据保存为另一种XML格式
         
  新的嵌套XML格式更加直观地反映出节点之间的从属关系,虽然它在编程方面不一定比前面的“扁平”格式方便,但它显然更适合人阅读和理解。

  将节点数据保存为嵌套格式也同样要用到MSXML组件,但生成XML文档的过程略有变化。仔细观察嵌套XML文档的结构,可以发现它蕴含一种递归结构——节点“浙江省”同“绍兴”的关系,正如“绍兴”同“嵊州”的关系,因此,TVEdit工程用一个递归过程方便地生成了嵌套XML文档,具体的代码这里就不再说明。

  读取节点数据

  不论是扁平XML文档还是嵌套XML文档,读取和恢复节点数据的代码完全一样,这得感谢DOMDocument类的强大功能。“读取XML文档”按钮的Click事件句柄首先创建一个DOMDocument对象,然后读入XML文档。接着,利用getElementsByTagName依次获取各个节点,分别设置节点的各个属性,最终装配出原先保存的TreeView,如下所示:

Private Sub bttnLoad_Click()
 Dim xmlDoc As DOMDocument30
 Set xmlDoc = New DOMDocument30
 If Not xmlDoc.Load("C:\XMLNodes.xml") Then
  MsgBox "不能读取C:\XMLNodes.xml文件。"
  Exit Sub
 End If
 SmartTreeView.Nodes.Clear
 Dim iNode As Integer
 Dim newElement As IXMLDOMElement
 For iNode = 0 To xmlDoc.getElementsByTagName("NODE").length - 1
  Set newElement = xmlDoc.getElementsByTagName ("NODE").Item(iNode)
  If newElement.getAttribute("ParentKey") = "" Then
   SmartTreeView.Nodes.Add , , _
   newElement.getAttribute("Key"), _
   newElement.getAttribute("Caption")
  Else
   SmartTreeView.Nodes.Add _
   newElement.getAttribute("ParentKey"), _
   tvwChild, newElement.getAttribute("Key"),newElement.getAttribute("Caption")
  End If
 Next
End Sub 
可从以下地址下载源码:
http://free.yesky.com/servlet/mydown.yeskydown?tag=4&objID=85263
一周云热点:Google打造云中Hadoop便捷版,强势对抗AWS 追溯Unite大会设计理念 感受Unity进化史 移动周报:仰望大神,不如退而探索! 腾讯发布QQ浏览器微信版 支持拖拽分享、消息提醒等功能(图) 乐视TV:LetvUI连续31周迭代36个版本 190个乐迷需求实现119个 云服务商评估体系建立,首批10家企业通过可信云服务认证 《找你妹2》开发者云中游再声明:热酷涉嫌严重违约发布侵权竞品 柴可:大姨吗的轻应用抉择 盘点2013年IT界25个最古怪的面试题 云计算再掀创业热潮,19家企业入驻微软创投 IBM斥资12亿美元,全球大规模扩建数据中心 “Careerfocus之夜”2014年新春客户答谢晚宴在京举办 Google蚕食了维基百科的访问量? 微软Surface Pro 2 的成功之道 精简代码,为网站减负的十大建议 应用宝逆袭上位 将重构腾讯移动应用分发体系 eBay基础设施的成功经验,我们该如何复制? 自定义富媒体广告:NativeX SDK 5.0发布! WunderBar:零硬件开发基础也能接入物联网! 深入解析:分布式系统的事务处理经典问题及模型 从世纪互联、华云数据和金石易服的发展服路径观察IDC产业发展 SA:2014移动运营商、终端和应用十大关键趋势 使用modern.IE来设计更现代化的网页 全国顶级域名根服务器21日下午疑遭黑客攻击 影响巨大 苹果下一代iPhone的十大预测 《近匠》第07期,专访《恶魔塔防》团队,看俄国复杂深奥的游戏文化 代码托管网站GitHub的总裁和CEO进行职位互换 使用Chromebook的五个指南 云中游终极声明:热酷侵权,有种正面回答少打太极 背后故事:英特尔Edison中国研发 内部评审中曾三次被拒 全栈工程师会是未来的发展趋势吗? 解释一下System.in.read(); 高分请教图形处理方面的高手,如何实现图片的放大并存储??? 有经验的同志请帮忙看看:使用PL\SOL Developer时登陆不进去,出现“找不到指定模块”oci.dll的错误。 表数据的的导出问题 惭愧呀,又诞生了一个两星水货~ mysql 中有没有将特殊符转义的函数? 在工程中添加文件出错的问题? 请教:网络拨号访问domino服务器该怎么设置??? 新手请教 求一个计数器的代码段!大家帮忙,解决送分! 怎样用java编一个局域网浏览器(像windows中的网络邻居那样)? 请教一个常识问题 三层问题:1、客户端如何提交查询条件;2、多个客户端提交查询,服务端如何应付? 关于2个Class相互调用的问题 execCommand的问题 AllCHN(大中国)进来拿分 十万火急!!!帮帮我呀! 问一个数据建模工具powerdesinger的简单问题 想使下拉框为只读,但里面的数据需要提交,该如何解决? 本人在这里做个广告!!欢迎使用www.961.cn电子邮局!! 软件工程静态分析程序的工具 请教存储过程的简单问题? 用C#做WEB,愁于在网页上不能实现查询,请高手帮忙. 求助!关于CRgn。 现在分好多,居然还有626分,五个三角星,是该散分的时候了。 各位帮忙,那里有这样的控件啊? 如何取消当前style中的下划线效果? 哪儿有BCB6 开发数据库的书和例子啊? %%%%%%%%%%%%%%%%%%求一段简单得SQL语句%%%%%%%%%%%%%%%%%% 如何把2000/XP下自帶的游戲完全刪除.. 求e书下载 谁写过ORACLE的OLE对象的分页程序??给点代码参考一下。 精彩不容错过 求助!!!忘各位大侠指点,小弟先谢了! 要想拖动层,该如何实现,急急!! 可以在服务器上创建一个以上的WEB站点吗? 菜鳥求助﹐在線等待﹗請進﹗ 愛因斯坦與牛頓的貓貓游戲 关于Tmessage的一个问题,有兴趣的请…… 传递指针的问题 float到底能保留几位小数? 关于前途的杂谈---选择C程序员还是JAVA程序员? 2003打开2002的报表,显示时特别慢 Dialog中的wm_char 怎样重新组合字符串 第二次提问 着急呀 如何读取空字段不出错 愚蠢的问题——请各位大哥指导 数据库版本冲突问题,各位不防进来看看啊! 查找一个区间的记录 有没有在vc6.0下用vc.net控件的方法呀? 已知a>0,b>0,c>0,且ab=1,a^2+b^2+c^2=4 ,则ab+bc+ac的最大值为? 我历史渣渣,有办法提升吗? 动力斜着时杠杆平衡,为什么杠杆公式不相等 难道杠杆静止就是杠杆的平衡嘛? 仅仅是静止嘛?那我怎么觉得当我要搬一块打石头的时候(还没搬)杠杆也静止 那是不是平衡状态 光的重量我认为,光是有重量的,物体因有重量而发生弧线,光的折射,是什么原因?速度变慢了?慢了就能变方向?所以说光有重量,并与其他物体一样,比如抛物线,光也与它一样的道理,由此,我想推 光是否有重量? 光是由什么组成的?有重量吗?以光速运行时,物体的重量会增加,光一直是以光速运行的,那组成它的物质的中连会不会增加? 好大的雾啊!有没有什么办法能使这片雾消除的? 光有重量吗?回答 光有没有重量?若有重量,那么在什么情况下光线会变弯?能回答得具体一点吗? 请问锡锑渣在哪能买到 价格 澳最大桉木公司因造成考拉伤亡被吊销环白宫与亲以色列团体会晤 承诺不会让伊驻韩美军用军邮走私毒品 韩称“防不胜埃及将出台指导政府消费具体规定 大幅驻韩美军频利用军事邮件走私毒品 韩方美国有意叫停窃听盟国元首 部门“内讧美众院听证窃听事件 国安局长称系分享美称法国西班牙自行实施电子窃听行动 韩国议员赴朝考察开城工业区 或将缓和奥巴马提名两名竞选支持者为美国驻外大日研究机构预测南海沟大震将致大阪13向上突破条件已经具备!周二低开下探是VOL.1129「晚安音乐」如果来生VOL.1127「睡前故事」一晚一个VOL.1134「泛阅读」喂,你的少特产学院 | 大米发糕怎么样才能发起特产博物馆 | 苏州两面黄券商自营净卖出限制解除 这些维稳政策理财陷阱多,上了央视的公司也不一定可麦片选不对,脂肪堆上身 -- 《只吃建党和建国差28年,你和UCloud探底回升暴露主力目的 明日走势必让散大秦第一皇帝末世剑神剑佛妖仙途之青蛇传幻空领域挤过幸福之门七破天剑起神雕剑极天下功勋灵宰天地伏牛山滑雪场旅游甘丹寺旅游金坛茅山旅游嬉戏谷动漫王国旅游灵峰探梅旅游养子沟旅游同心清真大寺旅游柳湖旅游许村旅游吾屯下寺旅游隆务寺旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘