I'm trying to get a treeview to show all drives on a machine including subfolders. I have accomplished this by looking at examples but have run into a problem with "TreeViewDrives_AfterSelect". If I remove the "If" Statement, the form will load with a message stating the an illegal path has been selected but then everything will work as expected. If I add the "If" statement, the form will execute without error, show all drives but they can't be accessed / will show no nodes etc.
Code:Imports System.IO Public Class Form1 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 'FIND ALL DRIVES Dim DrivesTop As TreeNode = TreeViewDrives.Nodes.Add("(Available Drives)") DrivesTop.ImageIndex = 2 DrivesTop.SelectedImageIndex = 2 DrivesTop.Tag = "" Dim drives As String() = Environment.GetLogicalDrives() Dim NUM As Integer = drives.Length Dim p As Integer = 0 While p <> NUM Dim Output As String = Convert.ToString(drives(p)) Dim AvailDrives As TreeNode = DrivesTop.Nodes.Add(Output) AvailDrives.Tag = Convert.ToString(drives(p)) AvailDrives.ImageIndex = 1 AvailDrives.SelectedImageIndex = 1 p += 1 End While End Sub Private Sub AddAllFolders(ByVal TNode As TreeNode, ByVal FolderPath As String) Try For Each FolderNode As String In Directory.GetDirectories(FolderPath) Dim SubFolderNode As TreeNode = TNode.Nodes.Add(FolderNode.Substring(FolderNode.LastIndexOf("\c") + 1)) SubFolderNode.Tag = FolderNode SubFolderNode.Nodes.Add("Loading...") Next Catch ex As Exception MsgBox("The following error occured: " & vbNewLine & vbNewLine & ex.Message) End Try End Sub Private Sub TreeViewDrives_BeforeExpand(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewCancelEventArgs) Handles TreeViewDrives.BeforeExpand If e.Node.Nodes.Count = 1 AndAlso e.Node.Nodes(0).Text = "Loading..." Then e.Node.Nodes.Clear() AddAllFolders(e.Node, CStr(e.Node.Tag)) End If End Sub Private Sub TreeViewDrives_AfterSelect(ByVal sender As System.Object, ByVal e As System.Windows.Forms.TreeViewEventArgs) Handles TreeViewDrives.AfterSelect If TreeViewDrives.SelectedNode.Nodes.Count = 1 AndAlso TreeViewDrives.SelectedNode.Nodes(0).Text = "Loading..." Then 'TreeViewDrives.SelectedNode.Nodes.Clear() AddAllFolders(TreeViewDrives.SelectedNode, CStr(TreeViewDrives.SelectedNode.Tag)) End If End Sub End Class




Reply With Quote