Tip 206: Populating the Outline Control with a List of Directories and
         Files Stored on a Disk

February 28, 1996

Abstract
The Microsoft® Windows® File Manager and Explorer applications use an
Outline control to display directories and files in a hierarchical list.
This article explains how to populate the Microsoft Visual Basic® version
4.0 Outline control using this same technique.

Using the Outline Control
The Microsoft® Visual Basic® version 4.0 Outline control is an advanced
List Box control that allows you to display a hierarchical list of items
to your user. The Outline control allows you to present items with
indentation levels that can be expanded (the subordinate items become
visible) or collapsed (the subordinate items become invisible). This
means that a directory can be saved to the Outline control at one level
of indentation and the files stored within that directory can be stored
at a secondary level of indentation.

The example program below populates an Outline control with all
directories and files stored on the selected disk. This feat is
accomplished by performing a recursive search through the disk's
file structure. The name of a file is retrieved from the disk's
directory. If this entry is a directory, it is added to the Outline
control as a first-level indentation item. However, if the entry is
a file, the entry is added to the Outline control at the next level
of indentation. This action is repeated until every directory and file
has been processed.

Example Program
This program shows how to populate the Outline control with all directory
and files stored on a disk drive.

 1. Create a new project in Visual Basic. Form1 is created by default.
 2. Add the following code to the General Declarations section of Form1:

Option Explicit
Dim FIndent As Integer
Dim FIndex As Integer
Dim StrtPath As String

 3. Add an Outline control to Form1. Outline1 is created by default.
 4. Add a Drive List Box control to Form1. Drive1 is created by default.
 5. Add the following code to the Change event for Drive1:

Private Sub Drive1_Change()
    Outline1.Clear
    Outline1.AddItem Drive1.Drive & "\"
    FIndent = 1
    FIndex = 0
    StrtPath = Drive1.Drive
    Get_Files StrtPath
    MsgBox "OK"
End Sub

 6. Create a new procedure called Get_Files. Add the following code to
    this procedure:

Private Sub Get_Files(FPath As String)
    Dim File_Name As String
    Dim File_Path As String
    Dim File_Read As Integer
    Dim X As Boolean
    Dim I As Integer

    FIndent = FIndent + 1
    File_Path = FPath & "\"
    File_Name = Dir$(File_Path, vbDirectory)
    File_Read = 1
    X = False

    Do While File_Name <> ""
        If File_Name <> "." And File_Name <> ".." Then

            If GetAttr(File_Path & File_Name) <> vbDirectory Then
                Outline1.AddItem File_Name
                FIndex = FIndex + 1
                Outline1.Indent(FIndex) = FIndent
            Else
                StrtPath = File_Path & File_Name
                Outline1.AddItem File_Name
                FIndex = FIndex + 1
                Outline1.Indent(FIndex) = FIndent
                X = True

                Get_Files StrtPath
            End If
        End If
        If X = True Then
            File_Name = Dir$(File_Path, vbDirectory)
                For I = 2 To File_Read
                    File_Name = Dir$
                Next
            X = False
        End If
        File_Name = Dir$
        File_Read = File_Read + 1
    Loop
    FIndent = FIndent - 1
End Sub

Run the example program by pressing F5. Select a disk drive from the Drive
List Box control by clicking the desired drive letter. The program will
display a message box when it has populated the Outline control with all
directories and files found on the target disk drive.

Additional References
Knowledge Base Q118939. "How to Add Highlight Ability to Visual Basic's
   Outline Control."
"List Box Controls." (Library, Technical Articles, Windows Articles,
   User Interface Articles, Controls)
"Outline." (Library, Product Documentation, Languages,
   Visual Basic 4.0 Professional and Enterprise Editions,
   Custom Control Reference, Outline)
Return