开发者

populate a treenode from a treenode

开发者 https://www.devze.com 2023-01-04 19:32 出处:网络
I built a treenode to be populated from my network drives, from this treeview I would like to populate another treeview to show the files when the first one is selected. For example, if the user were

I built a treenode to be populated from my network drives, from this treeview I would like to populate another treeview to show the files when the first one is selected. For example, if the user were to click on the c:\TestFolder then the second treeview would show the TestFolder, all sub folders and files. Below is my code, thanks.

Imports System
Imports System.IO
Public Class F_Treeview_Demo
    Public IsSomethingChecked As Boolean = False
    Private fbIgnoreClick As Boolean = False
    Private fbLoadingForm As Boolean = True
    Private sRead As String
    Public n As TreeNode
    Public l As New List(Of String)
    Public drivesTree As New List(Of String)


    Private Sub F_Treeview_Demo_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        ' Initialize the local directory treeview

        Dim nodeText As String = ""
        Dim sb As New C_StringBuilder
        With My.Computer.FileSystem
            For i As Integer = 0 To .Drives.Count - 1

                '** Build the combo box with drive's node text
                sb.ClearText()
                sb.AppendText(.Drives(i).DriveType.ToString)
                sb.AppendText(RemoveTrailingChar(.Drives(i).Name, gtBACKSLASH))
                cmbDrives.Items.Add(sb.FullText)


            Next
        End With

    End Sub

    Public Sub FillTree(ByVal s As String)

        Dim nodeText As String = ""
        Dim sb As New C_StringBuilder
        With My.Computer.FileSystem
            For i As Integer = 0 To .Drives.Count - 1

                '** Build the drive's node text
                sb.ClearText()
                sb.AppendText(.Drives(i).DriveType.ToString)
                sb.AppendText(RemoveTrailingChar(.Drives(i).Name, gtBACKSLASH))

                nodeText = sb.FullText
                'nodeText = Me.tvFolders.SelectedNode.Text
                'Check to see if DropDown Selection is the same as what has been read into i
                If (sb.FullText = s) Then

                    '** Add the drive to the treeview
                    Dim driveNode As TreeNode
                    tvFolders.Nodes.Clear()
                    driveNode = tvFolders.Nodes.Add(nodeText)
                    driveNode.ImageIndex = 0
                    driveNode.SelectedImageIndex = 1
                    driveNode.Tag = .Drives(i).Name


                    Dim FolderNode As String = ""
                    'Dim FirstNode As TreeNode
                    'tvFolders.Nodes.Clear()
                    'FirstNode = tvFolders.Nodes.Add(nodeText)

                    '** Add the next level of subfolders
                    ListLocalSubFolders(driveNode, .Drives(i).Name)
                    driveNode = Nothing
                End If
            Next
        End With

    End Sub

    Private Sub tvwLocalFolders_BeforeExpand(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) _
                                             Handles tvFolders.BeforeExpand

        ' Display the path for the selected node
        ' lblLocalPath.Text = e.Node.Tag
        ' Populate all child nodes below the selected node
        Dim parentPath As String = AddChar(e.Node.Tag)
        tvFolders.BeginUpdate()
        Dim childNode As TreeNode = e.Node.FirstNode
        'this i added
        Dim smallNode As TreeNode = e.Node.FirstNode

        Do While childNode IsNot Nothing
            ListLocalSubFolders(childNode, parentPath & childNode.Text)
            childNode = childNode.NextNode
            ''this i added
            ListLocalFiles(smallNode, parentPath & smallNode.Text)

        Loop
        tvFolders.EndUpdate()
        tvFolders.Refresh()
        ' Select the node being expanded
        tvFolders.SelectedNode = e.Node

    End Sub

    Private Sub ListLocalFiles(ByVal ParentNode As TreeNode, ByVal PParentPath As String)

        Dim FileNode As String = ""
        Try
            For Each FileNode In Directory.GetFiles(PParentPath)
                Dim smallNode As TreeNode
                smallNode = ParentNode.Nodes.Add(FilenameFromPath(FileNode))
                With smallNode
                    .ImageIndex = 0
                    .SelectedImageIndex = 1
                    .Tag = FileNode
                End With
                smallNode = Nothing
            Next
        Catch ex As Exception
        End Try

    End Sub

    Private Sub ListLocalSubFolders(ByVal ParentNode As TreeNode, ByVal ParentPath As String)
        ' Add all local subfolders below the passed Local treeview node
        Dim FolderNode As String = ""
        Try
            For Each FolderNode In Directory.GetDirectories(ParentPath)
                Dim childNode As TreeNode
                childNode = ParentNode.Nodes.Add(FilenameFromPath(FolderNode))
                With childNode
                    .ImageIndex = 0
                    .SelectedImageIndex = 1
                    .Tag = FolderNode
                End With
                childNode = Nothing
            Next
        Catch ex As Exception
        End Try

    End Sub

    Private Sub lblLocalPath_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)

    End Sub

    Private Sub grp开发者_Python百科LocalFileSystem_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles grpLocalFileSystem.Enter

    End Sub

    Private Sub cmbDrives_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbDrives.SelectedIndexChanged
        'populate tree view from user selection
        FillTree(Me.cmbDrives.SelectedItem.ToString)

    End Sub

    Private Sub checkBox_isSelected()

    End Sub

    Private Sub btnCommit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCommit.Click

        ListBox1.Items.Clear()

        CallRecursive(tvFolders)

        If (IsSomethingChecked = False) Then
            MessageBox.Show("Please select an item to replicate.")
        End If

    End Sub

    'End Function
    Private Sub PrintRecursive(ByVal n As TreeNode)
        System.Diagnostics.Debug.WriteLine(n.Text)

        If (n.Checked = True) Then
            IsSomethingChecked = True
            sRead = n.FullPath
            l.Add(sRead)
            'If (n.Checked = False) Then
            ' ListBox1.Items.Add(sRead)
            ' MessageBox.Show(n.FullPath)
            'End If

            ListBox1.Items.Add(sRead)
            '  MessageBox.Show(sRead)

            ' Next

        End If
        Dim aNode As TreeNode
        For Each aNode In n.Nodes
            PrintRecursive(aNode)


        Next

    End Sub

    ' Call the procedure using the top nodes of the treeview. 
    Private Sub CallRecursive(ByVal aTreeView As TreeView)
        Dim n As TreeNode
        For Each n In aTreeView.Nodes
            PrintRecursive(n)
            If IsSomethingChecked = True Then
                Exit Sub
            End If
        Next

    End Sub

    Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
        ListBox1.Items.Clear()

    End Sub

    Private Sub tvFiles_BeforeSelect(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles tvFiles.BeforeSelect
        FillTree(Me.tvFolders.SelectedNode.Tag)

    End Sub

    Private Sub tvFolders_NodeMouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles tvFolders.NodeMouseClick

    End Sub

    Private Sub tvFiles_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles tvFiles.AfterSelect

    End Sub
End Class


As I understand it you've created a treeview with nodes in it and when a node is selected that node with all it's children should be shown in another TreeView?

If so, just add the NodeMouseClick event handler and then add the code:

treeView2.Nodes.Clear()
treeView2.Nodes.Add(Ctype(e.Node.Clone(), TreeNode))

If the first TreeView don't already contain the actual files in the directories you'd also have to add code after this to loop through all the nodes in treeView2 and call something like Directory.GetFiles and add childnodes with the filenames.

For future reference, it's good to add code to the question, but I'd suggest trying to cut it down to only the really relevant bits if possible.

0

精彩评论

暂无评论...
验证码 换一张
取 消