遞歸過程在VB中的應用實例

發表于:2007-07-14來源:作者:點擊數: 標簽:
作者: 鄧世學 來源:www.ccw.com.cn Windows的資源管理器具有界面直觀、 操作簡便的特點,深受廣大電腦愛好者的歡迎和喜愛。 利用 VB 提供的TreeView控件完全可以把磁盤上的目錄(包括子目錄)放入Node對象中,其界面具有資源管理器的特點。把磁盤上的目錄放入
作者: 鄧世學

來源:www.clearcase/" target="_blank" >ccw.com.cn

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中文版下通過。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97