Announcement

Collapse
No announcement yet.

TreeView rekursiv erzeugen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TreeView rekursiv erzeugen

    Hi Leute,

    ich versuche gerade einen TreeView rekursiv zu erzeugen und bin auf ein, wie ich finde, merkwürdiges Problemchen gestoßen. Ich erhalte die Daten mit denen ich diese Ansicht erzeugen will aus einer Liste von Objekten die je eine Parent Eigenschaft haben. So weiß ich wie ich den Baum aufzubauen habe. Naja hier ist ein kleiner Ausschnitt:

    Zum folgenden Code ist zu sagen, dass das Element, das auf der höchsten Ebene steht, also ganz oben, sozusagen als Wurzel, als letztes in der Auflistung steht.

    Code:
    this.treeView1.BeginUpdate();
                for (int i = treeElements.Count-1; i >=0; i--)
                {
                    if (treeElements[i].Parent == null) //Dieses Objekt hat kein Parentobjekt, also steht es auf der höchsten Ebene
                    {
                        //Parentknoten erzeugen
                        //Eigentlich ist es doch egal, welchen Schlüssel ich nehme, oder; er muss nur eindeutig sein und das ist er ja (ok Name macht nicht viel Sinn, aber es geht ja nur darum ob es funktioniert.
                        var node = treeView1.Nodes.Add(treeElements[i].ToString(), treeElements[i].ToString() + i.ToString());
    
    //Für die Elemente die auf höchster Ebene stehen die entsprechenden Subnodes erzeugen
                        for (int j = 0; j < treeElements[i-1].Elements.Length; j++)
                        {
                            CreateSubNode(treeElements[i].Elements[j], i,node);
                            
                        }
    
    
                    }
                }
                this.treeView1.EndUpdate();
    Und die aufgerufene Methode
    Code:
    private void CreateSubNode(MyDirectory currentDir, int layer, TreeNode key)
            {
                if (treeElements[layer - 1].Parent == currentDir)
                {
                    
                    MessageBox.Show(treeView1.Nodes.IndexOf(key).ToString());
    //Macht hier der gewählte Schlüsselname etwas aus.
                    var newkey = treeView1.Nodes[treeView1.Nodes.IndexOf(key)].Nodes.Add(currentDir.ToString(),currentDir.ToString()+layer.ToString());
                    CreateSubNode(treeElements[layer - 1].Elements[0], layer - 1,newkey);
                }
    
            }
    Wenn ich das laufen lasse, dann wird in der Messagebox (nur für das Debuggen) der Index -1 angezeigt. Wie kann das sein? Laut MSDN wurde der Knoten bei einem Rückgabewert von -1 nicht gefunden. Aber ich habe ihn doch erzeugt.
    Er müsste ja da sein, oder werden die Unterelemente nicht durchsucht??
    Wenn ja wie muss ich das dann implementieren, dass auch die Unterelemente durchsucht werden??

    Greets
    Neodym

  • #2
    Da ich denn Aufbau von treeElements nicht kenne und mir auch nicht vorstellen kann kann ich da nicht viel weiterhelfen.
    Der folgende Code indem du einmal den Index i-1 benutzt in der Schleife dann aber doch auf TreeElement i zugreifst kommt mir Spanisch vor.

    [Highlight=C#]
    for (int j = 0; j < treeElements[i-1].Elements.Length; j++)
    {
    CreateSubNode(treeElements[i].Elements[j], i,node);
    }[/Highlight]

    Comment


    • #3
      Gibt es dann eine bessere Herangehensweise.
      Denn ich füge ja dem Unterelement vom Unterelement vom Unterelement... einen Knoten hinzu. Frage ich dann den Index ab und greife dann auf die Unterelemente der Parentknoten zu (was logisch keinen Sinn macht) erhalte ich eine Exception.
      Hat jemand eine Idee wie ich immer auf das Unterelement vom Unterlement usw. zugreifen kann?

      Comment


      • #4
        http://www.google.de/search?hl=de&rl...f&aqi=&aql=&oq=
        Christian

        Comment

        Working...
        X