Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo,

es geht um die Darstellung von Suchergebnissen (Dateipfade) in einem TreeView-Control. Dabei soll das in etwa wie ein Dateiexplorer sein. Die Suchergebnisse untergeordnet darzustellen ist auch kein Problem. Schwierigkeiten macht es Nodes an bereits vorhandenenen Nodes anzuhängen.

Das Suchprogramm gibt eine Liste mit Dateipfaden in diesem Format aus:

E:\Eigene Dateien\My Music\musik.mp3

E:\Eigene Dateien\My Music\nocheinemusikdatei.mp3

E:\Programme\irgendwas\datei.txt

E:\Downloads\doktorarbeit.doc

Diese Suchergebnisse möchte ich in einem TreeView darstellen. Das Schwierigste dabei ist, dass beispielsweise nocheinemusikdatei bei My Music mit angehängt wird. Bis jetzt sieht es bei mir so aus:

Imageshack - treeview.png

Der Code dazu sieht so aus:


namespace Baumstruktur

{

    public partial class Form1 : Form

    {



        public Form1()

        {


            InitializeComponent();



            FillTreeView(treeView1, @"E:\Eigene Dateien\Visual Studio 2008\Settings\datei.exe");

            FillTreeView(treeView1, @"E:\Eigene Dateien\Visual Studio 2008\Olaf\datei2.exe");

        }



        private void FillTreeNode(TreeNode parentNode, string[] splittedPath, int Level, int MaxLevel, TreeView tvw)

        {

            // Wenn der Knoten noch leer ist soll der erste String eingfügt werden

            if (parentNode.Text == "" && Level == 0)

            {

                parentNode.Text = splittedPath[Level];

                parentNode.Name = splittedPath[Level];                

            }



            TreeNode[] result = tvw.Nodes.Find(parentNode.Text, true);


            if (result.Length == 0) // Ausführen wenn der Eintrag noch nicht vorhanden ist

            {

                if (Level > 0)

                {


                    TreeNode[] resultPreviousNode = tvw.Nodes.Find(splittedPath[Level - 1], true);


                    if (resultPreviousNode.Length == 0)

                    {


                        TreeNode subNode = new TreeNode(splittedPath[Level]);

                        subNode.Name = splittedPath[Level];

                        parentNode.Nodes.Add(subNode);


                        if (Level < (MaxLevel - 1))

                            FillTreeNode(subNode, splittedPath, Level + 1, MaxLevel, tvw);

                    }

                    else

                    {

                        resultPreviousNode[0].Nodes.Add(parentNode);


                        if (Level < (MaxLevel - 1))

                        {

                            TreeNode subNode = new TreeNode(splittedPath[Level + 1]);

                            FillTreeNode(subNode, splittedPath, Level + 1, MaxLevel, tvw);

                        }

                    }

                }

                else

                {                    

                    if (Level < (MaxLevel - 1))

                        FillTreeNode(parentNode, splittedPath, Level + 1, MaxLevel, tvw);

                }

            }

            else

            {

                if (Level < (MaxLevel - 1))

                    if ((Level + 1) == MaxLevel)

                    {

                        FillTreeNode(parentNode, splittedPath, Level + 1, MaxLevel, tvw);

                    }

                    else

                    {

                        parentNode.Name = splittedPath[Level+1];

                        parentNode.Text = splittedPath[Level+1];

                        FillTreeNode(parentNode, splittedPath, Level + 1, MaxLevel, tvw);


                    }

            }







        }




        public void FillTreeView(TreeView tvw, string path)

        {


            string[] pathSplitted = path.Split('\\');

            TreeNode dummy = new TreeNode();



            FillTreeNode(dummy, pathSplitted, 0, pathSplitted.Count(), tvw);

            tvw.Nodes.Add(dummy); 



        }




    }

}



Ich bin für jede Hilfe dankbar!!

Geschrieben (bearbeitet)

is zwar vb.net und nich c#, aber ajo, dafür funktionierts :P , und is nicht so grausam if verschachtelt

sollte normal ganz gut lesbar und verstehbar sein.

Public Class Form1


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


        Dim test As String

        Dim test2 As String

        test = "c:\bla\test.exe"

        test2 = "c:\blub\test.exe"

        filltreeview(Me.TreeView1, test)

        filltreeview(Me.TreeView1, test2)


    End Sub



    Sub filltreeview(ByVal treeview As TreeView, ByVal pfad As String)

        Dim splitted_path() As String

        splitted_path = pfad.Split("\")

        Dim nodes() As TreeNode


        Dim nodeExists As Boolean = False




        For i As Integer = 0 To splitted_path.Length - 1

            For Each node As TreeNode In treeview.Nodes

                If node.Level = i And node.Text = splitted_path(i) Then

                    nodeExists = True

                End If

            Next



            If Not nodeExists Then


'wenns den node auf der Ebene noch nicht giebt, dann einen erstellen : z.b. "C:"


                Dim newNode As New TreeNode()

                newNode.Text = splitted_path(i)

                newNode.Name = splitted_path(i)


                If Not i = 0 Then


'sofern wir hier in der Ersten Ebene sind hängen wir den Node 

'direkt in die Treeview (siehe unten)


                    nodes = treeview.Nodes.Find(splitted_path(i - 1), True)


'Find() giebt uns hier ein array zurück mit allen Nodes die dem String 

'den wir suchen entsprechen


                    For Each n As TreeNode In nodes

                        If n.Level = i - 1 Then


'Jeden Node im Array prüfen ob er sich in der richtigen Ebene befindet, 

'sonst kann das den Pfad verfäschen, wenn gefunden, 

'unseren neuen Node als childNode reinschieben


                            n.Nodes.Add(newNode)

                        End If

                    Next

                Else

                    treeview.Nodes.Add(newNode)

                End If

            End If


            nodeExists = False

        Next

    End Sub

End Class

edit : ich habs noch a weng kommentiert.

Bearbeitet von streffin

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...