科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VB6.0设计真正实用的TreeView控件

VB6.0设计真正实用的TreeView控件

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

默认的TreeView不能对节点进行操作,那么本文将告诉你如何...

作者:东方欲晓 来源:yesky 2007年10月15日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
四、保存节点数据

  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

  综上所述,一个功能强大的TreeView已经制作完毕。经过改造的TreeView具有编辑、添加、删除、拖放节点的功能,更好地满足实际应用中的需求。

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章