Brauche Hilfe bei TreeView

napstermania

Mitglied
Hi

Ich wollte eine art Explorer schreiben und möchte das ganze über die TreeView lösen.

Bis jetzt hab ich es aber nur geschafft als Wurzelknoten einen selbstgeschriebenen Wurzelpfad zu benutzten.

Code:
TreeNode rootNode = new TreeNode("C:\\");

Wie kann ich als TreeNode alle Laufwerke anzeigen lassen damit in der TreeView als Wurzel der Desktop steht und darunter dann die Laufwerke liegen.

Für eine Hilfe wäre ich sehr dankbar :)
 
Du kannst dir über die Klasse DriveInfo aus dem Namespace System.IO die entsprechenden Laufwerke besorgen. Für jedes Laufwerk erstellst du eine TreeNode, welche du direkt an die Root deiner TreeView hängst.
 
Ja ich verstehe zwar was du meinst aber ich schaff es leider nicht es umzusetzen.

Ich bekomme über die Methode die Namen der logischen Laufwerke.

Code:
DriveInfo.GetDrives();

Kann ich das so direkt benutzen oder muß ich dafür ein Objekt anlegen? Wenn ich ein Objekt anlegen will, dann muß ich wieder einen Laufwerkpfad oder Buchstaben angeben. Also wird es wohl nicht über das Objekt gehen.

Des weiteren kann ich doch die DriveInfo nicht direkt an die TreeNode übergeben! Selbts nicht mit "ToString()". Dann startet das prgramm nicht. Selbst wenn ich vorher alle zurückgegebenen Laufwerke alles über eine Schleife inzialisiere hab ich als wert immer nur "System.IO.DriveInfo[]".

Ich habe es bis jetzt so versucht aber das klappt nicht.

Code:
string[] sDrives = new string[DriveInfo.GetDrives().Length]; 
            for(int i = 0; i < DriveInfo.GetDrives().Length; i++)
            {
                sDrives[i] = DriveInfo.GetDrives().ToString();
            }

Bin ich zu dumm oder bin ich auf dem komplett falschen weg? :)
 
habs nur kurz überflogen,
aber mit DriveInfo.GetDrives(); erhältst du laut MSDN einen DriveInfo-Array zurück

und diesen Array in einen Einzelstring konvertieren passt irgendwie nicht.... denke ich ;)

probiers einfach mal mit
C++:
array<System::IO::DriveInfo ^> ^Info = gcnew array<System::IO::DriveInfo ^>(20);
		Info = System::IO::DriveInfo::GetDrives();
 
Hy!

Habe ein einfaches Beispiel in VB geschrieben.
Zuerst müssen mal alle Laufwerke als Knoten angezeigt werden
tvwRoot ist der Name meines Treeviews.
Code:
        Dim strDrive As String
        tvwRoot.Nodes.Clear()
        For Each strDrive In Directory.GetLogicalDrives()
            With tvwRoot.Nodes.Add(strDrive)
                .Nodes.Add(DUMMY)
            End With
        Next

Um die Ordner oder Dateien von einem Laufwerk im Treeview anzuzeigen, muss eine Methode tvwRoot_BeforeExpand vorhanden sein.
In dieser Methode werden die Methoden
Code:
AddFolders(e.Node)
AddFiles(e.Node)
aufgerufen um die Ordner und Dateien im Treeview anzuzeigen.
Hier mal die Methode um die Daten anzuzeigen
Code:
    Private Sub AddFiles(ByVal nod As TreeNode)
        Dim strPath As String = nod.FullPath
        Dim strFile As String
        With nod
            For Each strFile In Directory.GetFiles(strPath)
                With nod.Nodes.Add(Path.GetFileName(strFile))
                    .Tag = ItemType.File
                End With
            Next
        End With
    End Sub
'Und hier wie man die Ordner anzeigt
Code:
    Private Sub AddFolders(ByVal nod As TreeNode)
        Dim strPath As String = nod.FullPath
        Dim strDir As String
        With nod
            For Each strDir In Directory.GetDirectories(strPath)
                With nod.Nodes.Add(Path.GetFileName(strDir))
                    .Tag = ItemType.Directory
                    .Nodes.Add(DUMMY)
                End With
            Next
        End With
    End Sub
Um mit den Ordnern bzw. Dateien weiterarbeiten zu können muss die Methode tvwRoot_AfterSelect vorhanden sein. Hier fragt man den Typ des gewählten Knoten ab.
Code:
        Try
            With e.Node
                Select Case .Tag

                Case ItemType.File
                         'Hier kann die Datei Information in labels oder ähnl. angezeigt werden
                         'oder Bilder geladen werden
                Case ItemType.Directory
                         'Wenn Ordner gewählt ist kann bsp. die Eigenschaft angezeigt werden

                        Dim di As New DirectoryInfo(.FullPath)
                        'Aufruf der Methode um die Eigenschaft anzuzeigen
                        DisplayFSIProperties(di)

                End Select
            End With
        Catch exp As Exception
            MessageBox.Show(exp.Message, Me.Text)
        End Try

Hier die Methode um die Info´s vom Ordner auszulesen
Code:
    Private Sub DisplayFSIProperties(ByVal fsi As FileSystemInfo)
        'Zeige die Eigenschaften vom gewählten Ordner
        lblCreationTime.Text = fsi.CreationTime.ToString
        lblLastAccessTime.Text = fsi.LastAccessTime.ToString
        lblLastWriteTime.Text = fsi.LastWriteTime.ToString
        lblExtension.Text = fsi.Extension
        lblName.Text = fsi.Name
        lblTWPath.Text = fsi.FullName
    End Sub

Ich hoffe das hilft ein wenig weiter. Wenn nicht kann ich auf wunsch das Bsp. hochladen.



ksk
 
Zuletzt bearbeitet:
Hy!

Habe ein einfaches Beispiel in VB geschrieben.
Zuerst müssen mal alle Laufwerke als Knoten angezeigt werden

Ich hoffe das hilft ein wenig weiter. Wenn nicht kann ich auf wunsch das Bsp. hochladen.

ksk

Ich glaube das ist es was ich auch suche, komme aber irgendwie auch nicht so richtig zurecht.
kannst du mal das Bsp hochladen
Danke
Krebsbachbub
 
Zurück