謝謝!

解决方案 »

  1.   

    http://vb.infoserv.com.tw/cptVB/Explorer.zip
    一个控件就能搞定了
      

  2.   

    http://vbworld.sxnw.gov.cn/Source/openfile.asp?kind=file&id=2&filename=dirview.zip
    http://www.applevb.com/sourcecode/fsofolder.zip
      

  3.   

    递归过程在VB中的应用实例 --------------------------------------------------------------------------------
         Windows的资源管理器具有界面直观、 操作简便的特点,深受广大电脑爱好者的欢迎和喜爱。 
        利用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中文版下通过。