TreeView控件的应用开发
作者:
来源:《艺术科技》2012年第03期
作者:
来源:《艺术科技》2012年第03期
摘 要:基于VS2008中Windows窗体应用程序中TreeView控件,并结合ListViewr控件和SplitContainer容器控件的使用,建立TreeView树形结构视图为主体的资源管理器,带给用户一个清晰简明的界面,提高了人机交互的友好性。
关键词:TreeView控件;应用;开发
TreeView是以树形列表显示数据的控件,能分层展开和收缩各节点子目录。TreeView控件的应用非常广泛,几乎所有的应用程序中都会存在。
本文主要是基于VS2008中Windows窗体应用程序中TreeView控件,并结合ListViewr控件和SplitContainer容器控件的使用,建立TreeView树形结构视图为主体的资源管理器,它带给用户一个清晰简明的界面,提高了人机交互的友好性。
1 项目创建与窗体的排版
运行VS2008,创建一个VB的Windows窗体应用程序,在Windows窗体上,拖入SplitContainer容器控件,该控件分为左右两个区域,每个区域可放置一个其他控件。在左边区域里拖入TreeView控件,在其属性窗口里把DOCK属性改为Fill。在右边区域拖入一个ListView控件,在基属性窗口里把DOCK属性改为Fill,Columns集合编辑器里添加3个成员(ColumnHeader)listview控件在哪里,分别将其名称改为:名称、大小、类型、修改时间。
2 TreeView控件的树形视图实现
2.1 在窗体代码类里上方,引用Imports System.IO命名空间,引用的目的是为了简写窗体类中关于驱动器、文件夹和文件的代码。
2.2 在窗体加载事件中建立一个节点“我的电脑”,并利用节点node的Tag属性来存放文件的完整地址,便于后面查询。遍历所有驱动器,并将驱动器的名称添加到TreeView中,形成一个驱动器的树形结构图。
Dim mynode As New TreeNode
mynode = TreeView1.Nodes.Add("我的电脑")
mynode.Tag = "mycomputer"
Dim drives As DriveInfo()= DriveInfo.GetDrives
Dim submynode As New TreeNode
For Each drive As DriveInfo In drives
submynode = mynode.Nodes.Add(drive.Name)
submynode.Tag = drive.Name
CreateTree(submynode,submynode.Tag.ToString)
Next
2.3 建立一个子程序来添加驱动器下的各个文件夹在TreeView上的节点。
Private Sub CreateTree(ByVal mynode As TreeNode,ByVal path As String)
Dim dir As DirectoryInfo = New DirectoryInfo(path)
Dim submynode As New TreeNode
If dir.Name.Substring(1,2)= ":\" Or dir.Attributes = FileAttributes.Directory Then
Try
For Each subdir As DirectoryInfo In dir.GetDirectories
If subdir.Attributes = FileAttributes.Directory Then
Try
submynode = mynode.Nodes.Add(subdir.Name)
submynode.Tag = subdir.FullName
CreateTree(submynode,submynode.Tag.ToString)
Catch ex As Exception
End Try
End If
Next
Catch ex As Exception
End Try
End If
End Sub
3 建立一个子程序用于在点击TreeView节点时,在ListView中显现该节点对应文件夹下的子文件夹和文件
Private Sub FilterListView(ByVal mynode As TreeNode)
ListView1.Items.Clear()''清空ListView
If mynode.Tag.ToString = "mycomputer" Then Return
Dim dir As DirectoryInfo = New DirectoryInfo(mynode.Tag.ToString)
If dir.Name.Substring(1,2)= ":\" Or dir.Attributes = FileAttributes.Directory Then
Try
Dim item As ListViewItem = Nothing
Dim subitem As ListViewItem.ListViewSubItem()= Nothing
For Each subdir As DirectoryInfo In dir.GetDirectories
‘定义显现节点对应文件夹下的子文件
If subdir.Attributes = FileAttributes.Directory Then
Try
item = New ListViewItem(subdir.Name,0)
subitem = New ListViewItem.ListViewSubItem()_
{New ListViewItem.ListViewSubItem(item,"文件夹"),_
New ListViewItem.ListViewSubItem(item,subdir.LastWriteTime.ToString)}
item.SubItems.AddRange(subitem)
ListView1.Items.Add(item)
Catch ex As Exception
End Try
End If
Next
For Each subdir As DirectoryInfo In dir.GetDirectories
‘定义显现节点对应文件夹下的文件(同上)
…
End Sub
4 建立TreeView的NodeMouseClick事件,在该事件中处理图标状态
Private Sub TreeView1_NodeMouseClick(ByVal sender As Object,ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs)Handles TreeView1.NodeMouseClick
Dim mynode As TreeNode = e.Node
If mynode.IsExpanded = False Then
mynode.SelectedImageIndex = 0
Else
mynode.SelectedImageIndex = 1
End If
FilterListView(e.Node)
End Sub
5 测试效果如下
参考文献:
[1] Microsoft公司的MSND Online.
[2] Windows 程序设计(第5版).方敏,张胜,赵勇,等译.北京:清华大学出版社,2010.
[3] 卢镇波,李清.Visual Basic 实用编程百例[M].北京:清华大学出版社,2005.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论