Entwickler-Ecke
Multimedia / Grafik - Treeview nodes-problem
robby_robbt - Mi 01.12.10 20:26
Titel: Treeview nodes-problem
Ich habe ein TreeView:
-A
-B
---C
-----D
---[E]
---F
-G
-H
Node E ist selected. Wie finde ich den Name von B heraus? Also der Knoten in dem sich E befindet?
Vielen Dank für Eure Antworten!
robby_robbt
jaenicke - Mi 01.12.10 21:19
Du kannst einfach so lange zum Parent des aktuellen Knotens gehen, bis du bei der ersten Ebene angekommen bist. ;-)
robby_robbt - Mi 01.12.10 21:40
:D Ups.
Danke trotzdem! Wie kann ich denn für jeden Knoten zum Namen den Namen vom Parent hinzufügen?
huuuuuh - Mi 01.12.10 21:54
hat nich jeder knoten diese eigenschaft? also .Parent? E.Parent wär in deinem Beispiel B ...
edit: grad nachgeschaut. Parent gibt es. TreeView.SelectedNode.Parent dürfte in deinem fall die TreeNode B zurückgeben
robby_robbt - Mi 01.12.10 22:00
In meiner TreeView ist ein Ordner mit seinen Unterordnern und dessen UNterordnern, etc.
Mein Ziel ist es den Pfad vom untersten Unterordner herauszufinden, indem ich:
den Namen vom Parent + den Namen des gerade seletierten Nodes zurückgebe, und erhalte so von allen Nodes den Pfad;)
Nur müsst ich dazu allen Nodes den Namen ändern. aber wie?
huuuuuh - Mi 01.12.10 22:05
könntest du mal ein konkretes beispiel machen? verstehe das grade nicht...
robby_robbt - Mi 01.12.10 22:10
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void UpdateChildren(TreeNode node) { foreach (TreeNode treeNode in node.Nodes) { node.Name = node.Text + ; UpdateChildren(treeNode); } } |
geschafft. ;)
---
Moderiert von
Narses: Beiträge zusammengefasst---
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| private void UpdateChildren(TreeNode node) { foreach (TreeNode treeNode in node.Nodes) { node.Name = node.Text + node.Parent.Text; <--hier gibts aber einen Fehler.. :/ UpdateChildren(treeNode); } } |
Moderiert von
Narses: C#-Tags hinzugefügt
huuuuuh - Mi 01.12.10 22:15
überleg mal, was Node.Parent für einen Wert hat, wenn Node der oberste Knoten ist, also gar keinen Parent hat ;)
robby_robbt - Mi 01.12.10 22:36
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| void Button1Click(object sender, EventArgs e) { TreeNode tn = tvList.TopNode; UpdateChildren(tn); } private void UpdateChildren(TreeNode node) { if(node.Text != "Main") { foreach (TreeNode treeNode in node.Nodes) { node.Text = "" + node.Text + node.Parent.Text.ToString(); UpdateChildren(treeNode); MessageBox.Show("" + node.Name); } } else if(node.Text == "Main") { node.Name = "" + Directory.GetCurrentDirectory(); } } |
Was mach ich bloß falsch?! :( grade eben ists noch gegangen..
Moderiert von
Narses: I- durch C#-Tags ersetzt
Yogu - Mi 01.12.10 22:58
Hm, fangen wir lieber nochmal mit dem Ablaufplan an:
- Ist der Knoten der Wurzelknoten?
- Ja: Der Text soll das aktuelle Verzeichnis sein.
- Nein: Der Text soll der Text des Parents plus der eigene Text sein.
- Führe Schritt 1 und 2 bei allen Kindknoten durch.
Schreib die Methode am besten nochmal neu. Übrigens kannst du mit
node.Parent == null ganz einfach überprüfen, ob ein Knoten der Wurzelknoten ist.
Desweiteren sollte die Verwendung von
Directory.GetCurrentDirectory() wohl überlegt sein. Ist sie das?
PS: Bitte schließe deine Quelltexte in
<span class="inlineSyntax">{PROTECTTAGe2e40b88a3857f49745bb30a6bb9d732}</span> ein. Danke :)
robby_robbt - Mi 01.12.10 23:13
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| void Button1Click(object sender, EventArgs e) { TreeNode tn = tvList.TopNode; UpdateChildren(tn); } private void UpdateChildren(TreeNode node) {
if(node.Parent == null) { node.Name = "" + Directory.GetCurrentDirectory(); foreach (TreeNode treeNode in node.Nodes) { tsslC4Manager.Text = node.Text; UpdateChildren(treeNode); } } else { foreach (TreeNode treeNode in node.Nodes) { tsslC4Manager.Text = node.Text; node.Name = node.Name + node.Parent.Text.ToString(); UpdateChildren(treeNode); } } } |
Hab es so versucht.. Tut mir leid, komm leider nicht viel weiter.. :(
jaenicke - Do 02.12.10 06:55
Wenn du da eine Ordnerstruktur darstellen willst:
- Hast du denn die Knoten schon erstellt?
- Es wäre wohl sinnvoller, die Unterknoten erst beim Aufklappen zu erstellen und zu benennen (sonst dauert es ewig bei vielen Unterordnern)
robby_robbt - Do 02.12.10 15:30
also was ich habe:
-A
-B
---C
------D
------E
---F
was ich haben möchte: ^^
-A
-B
---BC
------BCD
------BCE
---BF
Also soll Jeder Knoten den Namen vom Parent-Knoten + den eigenen Namen hinten Dran haben.
huuuuuh - Do 02.12.10 16:31
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| void Button1Click(object sender, EventArgs e) { TreeNode tn = tvList.TopNode; UpdateChildren(tn); } private void UpdateChildren(TreeNode node) {
if(node.Parent == null) { node.Name = Directory.GetCurrentDirectory(); foreach (TreeNode treeNode in node.Nodes) { UpdateChildren(treeNode); } } else { tsslC4Manager.Text = node.Text; node.Name = node.Parent.Name + node.Name; foreach (TreeNode treeNode in node.Nodes) { UpdateChildren(treeNode); } } node.Text =node.Name; } |
versuch mal so. gebe aber keine garantie, das es funktioniert :D
robby_robbt - Do 02.12.10 17:42
Danke hat funktioniert. ;)
Wie überprüfe ich eigentlich ob
-A
---B
---C
---D
A ein "Child-Node" enthält, dessen Namen "C" ist?
jaenicke - Do 02.12.10 17:49
Alle ChildNodes durchgehen und nachschauen?
Yogu - Do 02.12.10 20:48
huuuuuh hat folgendes geschrieben : |
versuch mal so. gebe aber keine garantie, das es funktioniert :D |
Naja, die Schleifen kann man aber auch zusammenpacken:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| void Button1Click(object sender, EventArgs e) { TreeNode tn = tvList.TopNode; UpdateChildren(tn); } private void UpdateChildren(TreeNode node) { if(node.Parent == null) node.Name = Directory.GetCurrentDirectory(); else { tsslC4Manager.Text = node.Text; node.Name = node.Parent.Name + node.Name; }
node.Text =node.Name;
foreach (TreeNode treeNode in node.Nodes) { UpdateChildren(treeNode); } } |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!