请问如何用VB在自己的程序中使用象“资源管理器”中的显示为“树型”文件夹的控件
要源码,谢谢。
要源码,谢谢。
解决方案 »
- 请问,vb与vb.net的不同之处
- 能否在Excel里使用vb.net?
- 在vb中,如何将一个XML文件通过ADO保存到access数据库的大字段,请指教,在线等,多谢您
- 怎样在vb中打开和关闭一个Excel文件
- VB6比VB5到底有哪些改进?
- 关于票据打印机的问题
- 在vb中开发usb端口!!!!!!!!!!!!!!(有谁知道)
- 求助:实现一个数据库日期于当前系统日期比较的问题,偶是超级菜鸟,各位大哥帮帮忙
- 关于数据库中数据删除的问题!(菜鸟求助!)
- 一个简单的问题呀
- 采用不同的连接字符串,导致recordset的UpdateBatch有不同的结果,一个成功,一个失败,请问这是为什么?
- 有谁还记得FBasic,有谁还记得于春?我想哭………………
Private Sub Form_Load()
Dim nodx As Node
Set nodx = trv.Nodes.Add(, , "AA", "第一项")
Set nodx = trv.Nodes.Add(, , "BB", "第二项")
Set nodx = trv.Nodes.Add(, , "CC", "第三项")Set nodx = trv.Nodes.Add("AA", 4, , "192.168.1.227")
Set nodx = trv.Nodes.Add("AA", 4, , "192.168.1.224")
Set nodx = trv.Nodes.Add("AA", 4, , "192.168.1.228")
nodx.EnsureVisibleSet nodx = trv.Nodes.Add("BB", 4, , "192.168.1.163")
Set nodx = trv.Nodes.Add("BB", 4, , "192.168.1.47")
nodx.EnsureVisible
'首先在菜单"工程"--"部件"中选中"microsoft Windows Common Controls 6.0"
'在窗口中画一个TreeView控件
Set nodx = TreeView1.Nodes.Add("CC", 4, , "192.168.1.121")
Set nodx = TreeView1.Nodes.Add("CC", 4, , "192.168.1.192")
Set nodx = TreeView1.Nodes.Add("CC", 4, , "192.168.1.133")
Set nodx = TreeView1.Nodes.Add("CC", 4, "vdsl1", "192.168.1.131")
Set nodx = TreeView1.Nodes.Add("CC", 4, "aa", "123456789")
nodx.EnsureVisibleSet nodex = TreeView1.Nodes.Add("aa", 4, , "这是123456789下面的一个节点")
End Sub
'在窗口中画一个TreeView控件Private Sub Form_Load()
Dim nodx As Node
Set nodx = TreeView1.Nodes.Add(, , "AA", "第一项")
Set nodx = TreeView1.Nodes.Add(, , "BB", "第二项")
Set nodx = TreeView1.Nodes.Add(, , "CC", "第三项")Set nodx = TreeView1.Nodes.Add("AA", 4, , "192.168.1.227")
Set nodx = TreeView1.Nodes.Add("AA", 4, , "192.168.1.224")
Set nodx = TreeView1.Nodes.Add("AA", 4, , "192.168.1.228")
nodx.EnsureVisibleSet nodx = TreeView1.Nodes.Add("BB", 4, , "192.168.1.163")
Set nodx = TreeView1.Nodes.Add("BB", 4, , "192.168.1.47")
nodx.EnsureVisibleSet nodx = TreeView1.Nodes.Add("CC", 4, , "192.168.1.121")
Set nodx = TreeView1.Nodes.Add("CC", 4, , "192.168.1.192")
Set nodx = TreeView1.Nodes.Add("CC", 4, , "192.168.1.133")
Set nodx = TreeView1.Nodes.Add("CC", 4, "vdsl1", "192.168.1.131")
Set nodx = TreeView1.Nodes.Add("CC", 4, "aa", "123456789")
nodx.EnsureVisibleSet nodex = TreeView1.Nodes.Add("aa", 4, , "这是123456789下面的一个节点")
End Sub
DirListBox 命名为Dir1
FileListBox 命名为File1
DriveListBox 命名为Drive1
在加入下面的源码:
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End SubPrivate Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub
'在Form上添加一个TreeView,Name为tvBG
Private Sub Form_Load()
Dim Root As Node'Add some items
With tvBG.Nodes
Set Root = .Add(, , , "Top-level Node #1")
.Add Root.Index, tvwChild, , "Child Node #1"
.Add Root.Index, tvwChild, , "Child Node #2"
.Add Root.Index, tvwChild, , "Child Node #3"
Set Root = .Add(, , , "Top-level Node #2")
.Add Root.Index, tvwChild, , "Child Node #1"
.Add Root.Index, tvwChild, , "Child Node #2"
.Add Root.Index, tvwChild, , "Child Node #3"
Set Root = .Add(, , , "Top-level Node #3")
.Add Root.Index, tvwChild, , "Child Node #1"
.Add Root.Index, tvwChild, , "Child Node #2"
.Add Root.Index, tvwChild, , "Child Node #3"
Set Root = .Add(, , , "Top-level Node #4")
.Add Root.Index, tvwChild, , "Child Node #1"
.Add Root.Index, tvwChild, , "Child Node #2"
.Add Root.Index, tvwChild, , "Child Node #3"
End WithEnd Sub
--------------------------------------------------------------------------------
描述:
添加一个节点
语法:
Object.add Text, Key, HyperLink, Node, AddType, Image
部分 描述
Object TreeView对象
Text 文本型,节点显示的文本,不能为空
Key 文本型,节点的关键子,在整个树中应是唯一的。不能是纯数字
HyperLink 文本型,节点的链界地址。可以为空
Node 节点对象,配合AddType使用。添加根节点时使用Nothing
AddType 数字型,节点的添加类型,可以使用常数
Image 文本型,节点前的图标,具体内容应为树对象的Images集合中的一个关键字
返回值:
所添加的节点对象Node
例子:
Dim Tree1
Set Tree1 = New TreeView
With Tree1
.Name = "Tree1"
.FirstDisplayLevel = 1
.ImagePath = "../image" .Add "根节点","Root","",Nothing,tvwRoot,"" '添加根节点Node参数必须传入Nothing
.Add "节点1","Key1","链接1",.Nodes("Root"),tvwChild,"" '当AddType=1时,添加子节点
.Add "节点2","Key2","链接2",.Nodes(1),tvwChild,"" 'Nodes集合可以使用关键字和数字两种方式引用
.Add "节点4","Key4","链接4",.Nodes("Key2"),tvwNext,"" '当AddType=3时,添加后置节点,节点放在Node的后面
.Add "节点3","Key3","链接3",.Nodes("Key4"),tvwPrevious,"" '当AddType=2时,添加前置节点,节点放在Node的前面
End With
--------------------------------------------------------------------------------
描述:
TreeView对象的节点集合,使用节点的关键字或序号来引用。节点序号是按照添加顺序排列,而不是显示的顺序。
语法:
Object.Nodes
部分 描述
Object TreeView对象
例子: Dim Tree1
Set Tree1 = New TreeView
With Tree1
.Name = "Tree1"
.FirstDisplayLevel = 1
.ImagePath = "../image" .Add "根节点","Root","",Nothing,0,""
.Add "节点1","Key1","",.Nodes("Root"),1,""
.Add "节点2","Key2","",.Nodes(1),1,""
.Add "节点4","Key4","",.Nodes("Key2"),3,""
.Add "节点3","Key3","",.Nodes("Key4"),2,""
End With
Sub DoIt()
For i=1 To Tree1.NodesCount
Msgbox "第" & i & "个节点:" & Tree1.Nodes(i).Text
Next
End Sub
http://www.applevb.com/sourcecode/fsofolder.zip
利用VB提供的TreeView控件完全可以把磁盘上的目录(包括子目录)放入Node对象中,其界面具有资源管理器的特点。把磁盘上的目录放入Node对象有多种方法,应该说采用递归方法是比较简洁的。
递归过程实现的思路:
简言之,递归过程就是子程序自己调用自己。由于磁盘上的目录是树形结构,而树形的节点和节点级数是不受限定的,仅把目录名放入一维或多维数组中难度较大,不易实现。编一子程序,给定目录,并建立当前节点,加入Node对象中,根据Dir1控件判断给定目录下是否有下级目录,如有,添加下级节点,并加入Node对象中如无则退出子程序。即子程序的功能是:如给定目录有子目录,则展开当前目录求子目录。如果在给定目录展开完成后,把下级目录当成给定目录,并调用子程序进行展开,即可把给定目录下的数级子目录全部展开完毕。下面就举例说明,为简便起见,TreeView控件只放入目录,文件名省略。
实现的过程:
1、 添加TreeView控件到窗体中:单击—“工程”—“部件”,选择Microsoft Windows Common Control 6.0”(文件路径为\WinNT\System32\Mscomctl.ocx)复选框,单击—“确定“按钮,TreeView控件即可出现在工具箱中并添加。
2、 在窗体中添加Drive、DirListBox、ImageList控件。
3、 控件名及主要属性如下:
控件及窗体名
主要属性值
备注
Form
Name=Form1:Caption=”测试窗体”
TreeView
Name=TreeView1
Drive
Name=Drive1:Visible=False
获得当前电脑磁盘的盘符
DirListBox
Name=Dir1:Visible=False
ImageList
Name=ImageList1
给TreeView1的Node对象图标
在应用程序当前目录下,放入一16X16的位图文件123.bmp,供TreeView1控件显示用。
实现的源程序如下:
Option Explicit '必须进行变量声明
Dim nodx As Node
Private Sub Form_Load()
On Error Resume Next
'控件与窗体一样大
TreeView1.Height = Form1.ScaleHeight
TreeView1.Width = Form1.ScaleWidth
'在 ImageList 控件中添加一个图象,该图像用于显示在TreeView1控件上。
Dim imgX As ListImage
'调入图形文件
Set imgX = ImageList1.ListImages.Add(, , LoadPicture("123.bmp"))
TreeView1.ImageList = ImageList1 '初始化ImageList。
TreeView1.LineStyle = tvwRootLines
TreeView1.Style = tvwTreelinesPlusMinusPictureText
Dim DriverCount As Integer
Dim GivePath As String
'创建根节点
Set nodx = TreeView1.Nodes.Add(, , "本人电脑", "本人电脑", 1)
For DriverCount = 0 To Drive1.ListCount - 1
GivePath = Left(Drive1.List(DriverCount), 2) + "\"
Set nodx = TreeView1.Nodes.Add("本人电脑", tvwChild, GivePath, GivePath, 1)
SSplitNode GivePath '把各盘的文件夹进行展开放于TreeView1控件中
Next DriverCount
End Sub
Sub SSplitNode(sGivePath As String) '子过程
'把给定目录下的子目录全部加入Node对象中
Dim SDI As Integer
Dim SDCount As Integer
'用于存放给定目录的下级子目录,该变量数组随递归过程调用而发生变化
Dim GivePathSubDir() As String
'如有则展开目录并放入TreeView1控件中
Dir1.Path = sGivePath
SDCount = Dir1.ListCount
If SDCount <> 0 Then
ReDim GivePathSubDir(SDCount - 1)
'把下级目录放入变量数组GivePathSubDir中
SubSaveSubDir sGivePath, GivePathSubDir, SDCount
End If
If SDCount = 0 Then Exit Sub
'即为递归出口。否则会形成死循环。
For SDI = 0 To SDCount - 1
Set nodx = TreeView1.Nodes.Add(sGivePath, tvwChild, _
GivePathSubDir(SDI), FOnlyPath(GivePathSubDir(SDI)), 1)
Next SDI
'调用递归(子程序自己调用自己)
For SDI = 0 To SDCount - 1
sGivePath = GivePathSubDir(SDI)
SSplitNode sGivePath
Next SDI
End Sub
Sub SubSaveSubDir(fGivePath As String, fGivePathSubDir() As String, fSDCount As Integer)
'fGivePath 给定目录串
'fGivePathSubDir 用于存放子目录
'fSDCount 子目录数
Dim i As Integer: Dim t As Integer
Dir1.Path = fGivePath
t = Dir1.ListCount
For i = 0 To t - 1
fGivePathSubDir(i) = Dir1.List(i)
Next i
fSDCount = t
End Sub
Function FOnlyPath(DString As String) As String
'功能是去掉上级目录,只留下当前目录名
'DString为给定的全路径目录名
If DString = "" Then Exit Function
Dim DLength As Integer
DLength = Len(DString)
Dim DD As Integer
For DD = DLength To 1 Step -1
If Mid(DString, DD, 1) = "\" Then Exit For
Next DD
FOnlyPath = Mid(DString, DD + 1)
End Function
Private Sub Form_Resize()
'控件与窗体一样大
TreeView1.Height = Form1.ScaleHeight
TreeView1.Width = Form1.ScaleWidth
End Sub
本程序在Win2000,VB6.0中文版下通过。
而是想通过一个界面可以选择想选的文件夹(非文件)
比
DirListBox
FileListBox
DriveListBox
方便的一种方法