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.
Und die aufgerufene Methode
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
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();
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); } }
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
Comment