文件與資源管理

Imports System.IO
Public Class frmexplorer
    Inherits System.Windows.Forms.Form
    Dim strCurrentPath As String
    '定義當前目錄路徑變量
    Dim strCurrentfile As String
    '定義當前文件名變量
    Dim tvCurrentNode As TreeNode
    '定義當前目錄在樹節點中位置的變量
    Dim copySourceFile As String, copyFileName As String
    '定義要拷貝的源文件路徑全名,以及該文件文件名的變量
    Dim contextMenuFocus As Integer
    '定義用來確定上下文菜單的彈出位置(在Treeview1還是Listview1)的變量
    Dim bModify As Boolean = False
    Dim sEditFileName As String

#Region " Windows 窗體設計器生成的代碼 "
   '此部分代碼省略不寫,因爲按上述步驟1及步驟2操作後,這部分代碼會自動生成
#End Region

#Region "瀏覽磁盤、文件夾及文件的操作,熟悉常用控件 - TreeView和ListView"
'此部分代碼見第5個步驟的代碼
#End Region
End Class
5. 爲了能夠瀏覽邏輯盤、文件夾,在TreeView1_AfterSelect事件中根據用戶所選擇節點的類型決定調用不同的自定義函數,如果用戶選擇的是根節點則調用自定義函數DispDriver(),如果用戶選擇的是子節點則調用DispDir()自定義函數。爲了在用戶選擇子節點時能夠在ListView控件中顯示此子節點(文件夾)中的文件,在TreeView1控件中列舉完此子節點(文件夾)下文件夾之後再調用DispFile()自定義的函數,在ListView控件中列表顯示此子節點(文件夾)中的文件。
調用自定義函數的程序及三個自定義函數DispDriver(),DispDir(),DispFile()的程序代碼如下:
#Region "瀏覽磁盤、文件夾及文件的操作,熟悉常用控件 - TreeView和ListView"
Private Sub TreeView1_AfterSelect(ByVal sender As Object, ByVal e As _
System.Windows.Forms.TreeViewEventArgs) Handles TreeView1.AfterSelect
        If e.Node.Text = "我的電腦" Then
            '列舉驅動器
            DispDriver(e.Node)
        Else
            '列舉子文件夾。
            DispDir(e.Node)
        End If
    End Sub

    '列舉驅動器
    Private Sub DispDriver(ByVal node As TreeNode)
        Dim drv As String
        Dim i As Integer
        If node.Nodes.Count = 0 Then
            '下面的循環是遍歷微機中的邏輯盤並在樹節點中增加這些邏輯盤符
            For Each drv In Directory.GetLogicalDrives
                TreeView1.SelectedNode = node
                Dim tmpNode As New TreeNode
                'tmpNode.Text = drv.Substring(0, drv.Length)
                tmpNode.Text = drv   '將邏輯盤符賦值給節點實例tmpNode的屬性Text
                tmpNode.Tag = drv
                tmpNode.ImageIndex = 1
                tmpNode.SelectedImageIndex = 1
                TreeView1.SelectedNode.Nodes.Add(tmpNode) '在樹節點中增加邏輯盤符
                TreeView1.SelectedNode.Nodes(i).EnsureVisible()
'在樹節點中剛增加邏輯盤符節點可見
                i = i + 1
            Next
        End If
    End Sub

    '列舉子文件夾名稱
    Private Sub DispDir(ByVal node As TreeNode)
        Try
            TreeView1.SelectedNode = node
            Dim DirectoryPath As String = node.Tag.ToString()
            If node.Nodes.Count = 0 Then
                '下面的條件判斷是保證所選定的目錄路徑名的最後一個字符爲 "/"
                If DirectoryPath.Substring(DirectoryPath.Length - 1) <> "/" Then
                    DirectoryPath += "/"
                End If
                strCurrentPath = DirectoryPath         '保存當前選定的文件夾的目錄路徑
                tvCurrentNode = TreeView1.SelectedNode '保存當前選定的樹節點中位置
                Dim Dir As String
                Dim i As Integer
                '下面的循環是遍歷選定的邏輯盤或文件下的子文件夾並在樹節點中增加這些子文件夾
                For Each Dir In Directory.GetDirectories(DirectoryPath)
                    Dim tmpNode As New TreeNode
tmpNode.Text = Dir.Substring(Dir.LastIndexOf("/") + 1)
'取出選定文件夾下的子文件夾的名稱
                    tmpNode.Tag() = Dir
                    tmpNode.ImageIndex = 2
tmpNode.SelectedImageIndex = 3
'當在樹節點中選定某文件夾,顯示索引號爲3的圖形(即是打開文件夾的圖形)
TreeView1.SelectedNode.Nodes.Add(tmpNode)
'在樹節點中增加選定文件夾下的子文件夾的名稱
TreeView1.SelectedNode.Nodes(i).EnsureVisible()
'在樹節點中剛增加的子文件夾節點可見
                    i += 1
                Next
            End If
            ListView1.Update()
            DispFile(node) '列舉完文件夾之後再列表顯示這個文件夾中的文件。
        Catch ex As Exception
        End Try
    End Sub

    '列舉所選定文件夾下面的文件的文件名稱及最後訪問時間
    Private Sub DispFile(ByVal node As TreeNode)
        Dim DirectoryPath As String = node.Tag.ToString()
        '下面的條件判斷是保證所選定的目錄路徑名的最後一個字符爲 "/"
        If DirectoryPath.Substring(DirectoryPath.Length - 1) <> "/" Then
            DirectoryPath += "/"
        End If
        Try
ListView1.Items.Clear()
'清除列表框中的所有項目以便顯示所選定文件夾下面的文件信息
            Dim tmpFile As String
            Dim lvItem As ListViewItem
            '下面的循環是遍歷選定的目錄下的文件並在列表框中顯示
            For Each tmpFile In Directory.GetFiles(DirectoryPath)
                lvItem = New ListViewItem(Path.GetFileName(tmpFile))   '文件名稱
                lvItem.SubItems.Add(File.GetLastAccessTime(tmpFile))
'爲文件名稱增加子項目(最後訪問時間)
                ListView1.Items.Add(lvItem)
             '將文件名稱這個項目加載到ListView中(它的子項目在第二列顯示)
            Next
            ListView1.Update()
        Catch ex As Exception
        End Try
    End Sub
#End Region1. TreeView 控件的主要屬性
Nodes集合屬性的功能說明
屬性名 屬性說明
FirstNode 屬性 FirstNode返回當前節點的第一個子節點。如果當前節點沒有子節點,則 FirstNode 屬性返回空(Nothing)。
LastNode 屬性 LastNode 返回當前節點的最後一個子節點。如果當前節點沒有子節點,則 LastNode 屬性返回空(Nothing)。
NodeFont 屬性 返回或設置當前節點的字體
PrevVisbleNode 屬性 返回當前節點的上一個可見節點
PrevNode 屬性 返回當前節點的上一個節點(無論該節點是否可見)
NextVisbleNode 屬性 返回當前節點的下一個可見節點
NextNode 屬性 返回當前節點的下一個節點(無論該節點是否可見)
Parent 屬性 返回當前節點的父節點
IsExpanded 屬性 返回當前節點是否已經展開
IsSelected 屬性 返回當前節點是否被選中
FullPath 屬性 返回該節點的的完整路徑

Nodes屬性是集合屬性,即當前節點的子節點Nodes屬性與表6-2相同。
(2)SelectedNode屬性
SelectedNode屬性用來設置或返回當前被選中的節點,它也是一個集合屬性,它的集合屬性的子屬性和方法與Nodes集合屬性的子屬性和方法基本相同。
用編程的方式實現將 TreeView 控件的 ImageList 屬性設置爲希望使用的ImageList 控件的代碼如下:
TreeView1.ImageList = ImageList1
①ImageIndex 屬性
只有設置TreeView 控件的ImageList屬性與ImageList 控件相關聯後,才能設置ImageIndex 屬性。
ImageIndex 屬性爲TreeView 控件中的節點設置默認圖像, ImageIndex 屬性確定爲正常和展開狀態下的節點顯示的圖像。節點旁邊顯示圖像由ImageIndex 屬性值從TreeView 控件的 ImageList 屬性中命名的 ImageList 控件獲取圖像。
②SelectedImageIndex 屬性
SelectedImageIndex 屬性確定爲選定狀態下的節點顯示的圖像。選定狀態下節點旁邊顯示圖像由SelectedImageIndex屬性值從TreeView 控件的 ImageList 屬性中命名的 ImageList 控件獲取圖像。
ImageIndex 屬性,SelectedImageIndex屬性可在代碼中設置,也可在"樹節點編輯器"中設置(如圖6-4)。
(4)CheckBoxes 屬性
TreeView 控件的 CheckBoxes 屬性的功能可以決定是否在節點旁顯示覆選框;當該屬性設置爲 True,則在顯示樹視圖時,節點旁邊帶有複選框,此時,用戶可以通過單擊鼠標選中或取消節點旁的複選框以決定節點是顯示或清除;當然用戶也可以通過編程的方式在程序中將節點的 Checked 屬性設置爲 true 或 false以決定節點是顯示或清除。
(5)Indent屬性
Indent屬性用來設置父節點與子節點之間的水平縮進距離。
(6)LabelEdit屬性
LabelEdit屬性用來設置是否可以編輯節點的標籤文本。
(7)PathSeparator屬性
PathSeparator屬性獲取或設置節點路徑所使用的分隔符串,缺省的分隔符爲"/"。
(8)Scrollable屬性
Scrollable屬性獲取或設置當TreeView 控件中的節點超出邊界時是否添加滾動條,缺省值爲True。
(9)Sorted屬性
Sorted屬性獲取或設置是否將TreeView控件中的節點按字母順序排序。
(10)VisibleCount屬性
VisibleCount 返回TreeView控件中完全可見的樹節點的數目,該屬性是一個只讀屬性。
(11)HotTracking屬性
HotTracking 返回或設置當鼠標指針移過樹節點標籤時,樹節點標籤是否具有超級鏈接的外觀。
(12)ShowLines屬性
ShowLines屬性返回或設置是否顯示在TreeView控件的父子節點之間的關係線,缺省值爲True。
(13)ShowPlusMinus屬性
ShowPlusMinus屬性返回或設置是否在包含有子節點的父節點前顯示加號 (+) 和減號 (-) 按鈕,缺省值爲True。加號 (+) 表示該項目沒有展開,單擊加號 (+) 可以展開項目,此時顯示減號 (-),單擊減號 (-)將摺疊該項目,減號 (-)又變成加號 (+) 。
(14)ShowRootLines屬性
ScrollableShowRootLines屬性返回或設置是否顯示TreeView控件根節點之間連線,缺省值爲True。

ShowLines屬性、ShowPlusMinus屬性、ShowRootLines屬性最好保留它們的缺省屬性值,因爲這三個屬性值都爲True時,父節點和子節點的樹狀結構關係會顯示的清晰明瞭。

2. TreeView 控件常用事件
(1)BeforeSelect事件和AfterSelect事件
在選中節點"前","後"觸發。AfterSelect事件是在設計器上雙擊TreeView 控件默認打開的事件,也是最常用的事件(案例6-1使用了TreeView 控件的AfterSelect事件)。
(2)BeforeCollapse事件和AfterCollapse事件
當節點摺疊"前","後"觸發。當子節點展開的時候,單擊父節點使子節點收斂前後分別觸發BeforeCollapse事件和AfterCollapse事件。
(3)BeforeExpand事件和AfterExpand事件
這兩個事件與BeforeCollapse事件和AfterCollapse事件剛好相反,BeforeExpand事件和AfterExpand事件分別在節點展開"前","後"觸發。
(4)AfterLabelEdit事件和BeforeLabelEdit事件
這兩個事件在編輯節點的標籤文本"前","後"觸發。
    (5)BeforeSelect事件和AfterSelect事件
這兩個事件在選定節點"前","後"觸發。
(6)BeforeCheck事件和AfterCheck事件
當TreeView 控件的CheckBoxes 屬性設置爲 True時,當選中節點前的複選框"前","後"觸發。
3. TreeView 控件常用方法
(1)CollapseAll方法
CollapseAll 方法可以將所有TreeView控件中展開的節點摺疊起來。
調用的格式爲:TreeView1. CollapseAll()
(2)ExpandAll方法
ExpandAll方法可以將所有TreeView控件中摺疊的節點都展開。
調用的格式爲:TreeView1. ExpandAll ()
(3)GetNodeAt方法
GetNodeAt方法可以檢索位於指定位置的節點。
調用的格式爲:TreeView1. GetNodeAt(x as integer, y as integer)
(4)GetNodeCount方法
GetNodeCount方法可以返回TreeView控件的節點數,返回TreeView控件的節點數根據調用此方法時傳遞的邏輯參數值的不同而不同。如果調用此方法時傳遞的邏輯參數值爲True,則返回的節點數是包括子節點的;如果調用此方法時傳遞的邏輯參數值爲False,則返回的節點數是不包括子節點的;
調用的格式爲:TreeView1.GetNodeCount(IncludeSubtrees as Bollean)

   End Class

 

http://hi.baidu.com/jonesvale/blog/item/0fda53de50dd481b4954038c.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章