Member 14633063 Ответов: 2

Не показывать весь путь подкаталогов в treeview


У меня есть код, который заполнит treeview каталогами данного диска. Но каждый узел (подкаталог) показывает весь путь к этому подкаталогу. Я бы хотел посмотреть
С:
Пользователи
Джек
Джилл

вместо
С:
C:\Users
C:\Users\Jack
C:\Users\Jill

Вот мой код:
Imports System.IO

Public Class Form1

    Dim CurrentDirectory As String
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.CenterToParent()
        TreeView1.Nodes.Add("C:")
        PopulateTreeView("C:\", TreeView1.Nodes(0))
        TreeView1.Nodes(0).Tag = "Done"
    End Sub
    
    Private Sub TreeView1_NodeMouseClick(sender As Object, e As TreeNodeMouseClickEventArgs) Handles TreeView1.NodeMouseClick
        If e.Node.Tag <> "Done" then
            PopulateTreeView(e.Node.Text, e.Node)
            e.Node.Tag = "Done"
        End If
    End Sub

    Public Sub PopulateTreeView(ByVal directoryValue As String, ByVal parentNode As TreeNode)

        Dim DirectoryArray As String()

        If directoryValue = "Access Denied" Then
            Exit Sub
        End If

        Try
            DirectoryArray = Directory.GetDirectories(directoryValue)
        Catch ex As UnauthorizedAccessException
            Dim myNode As TreeNode = New TreeNode("Access Denied")
            parentNode.Nodes.Add(myNode)
            Exit Sub
        End Try

        If DirectoryArray.Length <> 0 Then
            For Each CurrentDirectory In DirectoryArray
                If Microsoft.VisualBasic.Mid(CurrentDirectory, 4, 25) <> "System Volume Information" Then
                    Dim myNode As TreeNode = New TreeNode(CurrentDirectory)
                    parentNode.Nodes.Add(myNode)
                End If
            Next
        End If

    End Sub

End Class

Может быть, это и нелегко сделать, но я только учусь VB.Нет, так что я понятия не имею. Какой-нибудь
помощь была бы очень признательна.

Кроме того, предварительный просмотр CodeProject (перед публикацией вопроса) показывает каждую строку моего вопроса, начиная с столбца 1. Не знаю, как он будет отображаться при публикации в CodeProject...

Спасибо

Что я уже пробовал:

Куча поисковиков в google, но я отказался от этого...

phil.o

Вы видели каждую строку, начинающуюся в столбце 1, потому что вы не включили свой кодовый блок в надлежащий <pre> метка. Я исправил форматирование вашего вопроса, Вы можете посмотреть, как должен выглядеть необработанный источник.

2 Ответов

Рейтинг:
5

Member 14633063

Никакого решения, просто переход на "Закрыто".


CHill60

Такого статуса нет. Я советую вам не публиковать бессмысленные решения ваших собственных вопросов, а затем принять их. Похоже, что rep-point hunting и многие счастливые участники будут более чем счастливы сообщить вам о злоупотреблении сайтом.
Как только сообщение содержит решение, оно выпадает из списка "вопросы без ответа".

Рейтинг:
0

phil.o

Попробуйте заменить

Dim myNode As TreeNode = New TreeNode(CurrentDirectory)
с
Dim myNode As TreeNode =
New TreeNode(CurrentDirectory.Substring(CurrentDirectory.LastIndexOf("\") + 1))
.


Member 14633063

Спасибо за подсказку о том, как использовать

 to maintain spacing in a question.
Also like seeing the use of substring(xxx.lastindexof("\") + 1).

Your solution has a problem though... The CurrentDirectory variable is parentNode for the next drilldown (on that node), and so must be the entire path from the drive to the last subdirectory.

For example, I was running on F:\today\ and today contains a subdirectory named 'hold.' when I tried to drill down on today, I got the below error

System.IO.DirectoryNotFoundException: 'Could not find a part of the path 'D:\DriveD\Visual Studio\Projects\Visual Basic\aTreeViewExample\bin\Debug\Today'.'

I've been otherwise occupied for a day or so, I will keep trying to solve...

Thanks

phil.o

Вам придется отлаживать, чтобы точно видеть, что происходит. Вам нужна помощь в отладке?
Кроме того, пожалуйста, используйте только теги <pre> Для блоков кода, не используйте их для обычного текста и избегайте их в комментариях.

Member 14633063

Или, может быть, я не совсем понимаю, в чем именно заключается проблема...
Во всяком случае, буду продолжать искать спасибо