none
VB 2010 有目錄控制項嗎? RRS feed

  • 問題

  • 之前用 VB6 有 ExplorerTree 控制項可以顯示目錄,包含了 磁碟機、網路、桌面、我的文件等等

    不知道 VB2010 是否有此控制項呢?

    2011年3月28日 上午 09:38

解答

  • 您好

    把 ExpTree1.ExpTreeNodeSelected 事件加上,pathName 就是使用者點選的路徑

    #Region "   ExplorerTree Event Handling"
        Private Sub AfterNodeSelect(ByVal pathName As String, ByVal CSI As CShItem) Handles ExpTree1.ExpTreeNodeSelected
            Dim dirList As New ArrayList()
            Dim fileList As New ArrayList()
            Dim TotalItems As Integer
            LastSelectedCSI = CSI
            If CSI.DisplayName.Equals(CShItem.strMyComputer) Then
                dirList = CSI.GetDirectories 'avoid re-query since only has dirs
            Else
                dirList = CSI.GetDirectories
                fileList = CSI.GetFiles
            End If
            SetUpComboBox(CSI)
            TotalItems = dirList.Count + fileList.Count
            Event1.WaitOne()
            If TotalItems > 0 Then
                Dim item As CShItem
                dirList.Sort()
                fileList.Sort()
                Me.Text = pathName
                sbr1.Text = pathName & "                 " & _
                            dirList.Count & " Directories " & fileList.Count & " Files"
                Dim combList As New ArrayList(TotalItems)
                combList.AddRange(dirList)
                combList.AddRange(fileList)

                'Build the ListViewItems & add to lv1
                lv1.BeginUpdate()
                lv1.Items.Clear()
                For Each item In combList
                    Dim lvi As New ListViewItem(item.DisplayName)
                    With lvi
                        If Not item.IsDisk And item.IsFileSystem And Not item.IsFolder Then
                            If item.Length > 1024 Then
                                .SubItems.Add(Format(item.Length / 1024, "#,### KB"))
                            Else
                                .SubItems.Add(Format(item.Length, "##0 Bytes"))
                            End If
                        Else
                            .SubItems.Add("")
                        End If
                        .SubItems.Add(item.TypeName)
                        If item.IsDisk Then
                            .SubItems.Add("")
                        Else
                            If item.LastWriteTime = testTime Then '"#1/1/0001 12:00:00 AM#" is empty
                                .SubItems.Add("")
                            Else
                                .SubItems.Add(item.LastWriteTime)
                            End If
                        End If
                        '.ImageIndex = SystemImageListManager.GetIconIndex(item, False)
                        .Tag = item
                    End With
                    lv1.Items.Add(lvi)
                Next
                lv1.EndUpdate()
                LoadLV1Images()
            Else
                lv1.Items.Clear()
                sbr1.Text = pathName & " Has No Items"
            End If
        End Sub

    #End Region


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 2011年3月29日 上午 03:07
    2011年3月29日 上午 01:37
    版主

所有回覆

  • An All VB.NET Explorer Tree Control with ImageList Management

    http://www.codeproject.com/KB/cpp/VbNetExpTree.aspx

    2011年3月28日 上午 09:52
  • An All VB.NET Explorer Tree Control with ImageList Management

    http://www.codeproject.com/KB/cpp/VbNetExpTree.aspx

    請問要怎麼抓取目前 ExpTree1 的路徑?
    2011年3月28日 上午 11:02
  • 你置頂公告看過沒?

    關於Visual Basic 資源分享

    裡面有微軟提供的範例。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年3月28日 下午 02:38
  • 這篇舊的討論也可以看一看:

    http://social.msdn.microsoft.com/forums/zh-TW/232/thread/4d06253e-8ae2-4ab9-8d7b-b9ff7fecf940/


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年3月28日 下午 02:46
  • 逐步解說:使用設計工具以 ListView 和 TreeView 控制項建立檔案總管風格的介面

    http://msdn.microsoft.com/zh-tw/library/ms171645(v=VS.100).aspx


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年3月28日 下午 04:07
    版主
  • 要自己建立檔案總管一些範例

    用VB 2010讀取轉換後不能執行

    大部分的範例都是 2005~

     

    ExpTreeLib.dll 已經可以顯示目錄、磁碟機、網路、桌面、我的文件 等等

    就差怎麼抓取使用者點選的路徑而已~

    附上ExpTreeLib.dll下載點:http://www.codeproject.com/KB/cpp/VbNetExpTree.aspx

    2011年3月29日 上午 12:53
  • 您好

    把 ExpTree1.ExpTreeNodeSelected 事件加上,pathName 就是使用者點選的路徑

    #Region "   ExplorerTree Event Handling"
        Private Sub AfterNodeSelect(ByVal pathName As String, ByVal CSI As CShItem) Handles ExpTree1.ExpTreeNodeSelected
            Dim dirList As New ArrayList()
            Dim fileList As New ArrayList()
            Dim TotalItems As Integer
            LastSelectedCSI = CSI
            If CSI.DisplayName.Equals(CShItem.strMyComputer) Then
                dirList = CSI.GetDirectories 'avoid re-query since only has dirs
            Else
                dirList = CSI.GetDirectories
                fileList = CSI.GetFiles
            End If
            SetUpComboBox(CSI)
            TotalItems = dirList.Count + fileList.Count
            Event1.WaitOne()
            If TotalItems > 0 Then
                Dim item As CShItem
                dirList.Sort()
                fileList.Sort()
                Me.Text = pathName
                sbr1.Text = pathName & "                 " & _
                            dirList.Count & " Directories " & fileList.Count & " Files"
                Dim combList As New ArrayList(TotalItems)
                combList.AddRange(dirList)
                combList.AddRange(fileList)

                'Build the ListViewItems & add to lv1
                lv1.BeginUpdate()
                lv1.Items.Clear()
                For Each item In combList
                    Dim lvi As New ListViewItem(item.DisplayName)
                    With lvi
                        If Not item.IsDisk And item.IsFileSystem And Not item.IsFolder Then
                            If item.Length > 1024 Then
                                .SubItems.Add(Format(item.Length / 1024, "#,### KB"))
                            Else
                                .SubItems.Add(Format(item.Length, "##0 Bytes"))
                            End If
                        Else
                            .SubItems.Add("")
                        End If
                        .SubItems.Add(item.TypeName)
                        If item.IsDisk Then
                            .SubItems.Add("")
                        Else
                            If item.LastWriteTime = testTime Then '"#1/1/0001 12:00:00 AM#" is empty
                                .SubItems.Add("")
                            Else
                                .SubItems.Add(item.LastWriteTime)
                            End If
                        End If
                        '.ImageIndex = SystemImageListManager.GetIconIndex(item, False)
                        .Tag = item
                    End With
                    lv1.Items.Add(lvi)
                Next
                lv1.EndUpdate()
                LoadLV1Images()
            Else
                lv1.Items.Clear()
                sbr1.Text = pathName & " Has No Items"
            End If
        End Sub

    #End Region


    歡迎參觀我的Blog.NET菜鳥自救會
    • 已標示為解答 2011年3月29日 上午 03:07
    2011年3月29日 上午 01:37
    版主
  • 3Q

    已經抓到目錄了~

    但是我設定  ExpTree1.RootItem = GetCShItem("C:\aaa")

    他會把他 C:\aaa 當成 跟目錄

    其他的磁碟機、網路、桌面、我的文件 等等都會消失

    是否能展開 c:\aaa並保留其他的選項目錄呢?

    2011年3月29日 上午 03:12