Warum suchst du dir als Anfänger gleich so eine komplexe Aufgabe heraus oder ist dies eine Schul- oder Uni-Aufgabe?
Du hast (anscheinend) das Prinzip 'Rekursion' nicht verstanden, s. a.
de.wikipedia.org/wiki/Rekursion.
Jeder Knoten eines TreeView besitzt wiederum seine Unterknoten in einer separaten Nodes-Collection.
Du brauchst nur die Schleife einmal schreiben und dann für die Unterknoten (rekursiv) aufrufen.
Eleganter geht es mit einer foreach-Schleife:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| void CopyToListBox(TreeNodeCollection nodes) { foreach(TreeNode node in nodes) { if(node.Checked) listBox.Items.Add(node.Text);
if(node.Nodes.Count > 0) CopyToListBox(node.Nodes); } } |
Um auch noch die Namen der Oberknoten in die Listbox voran zu schreiben, mußt du (einfach!) den zusammengesetzten Namen als weiteren Parameter der rekursiven Methode mitgeben.
Und wenn du willst, das automatisch alle Unterknoten (un)gecheckt werden, würde ich das mittels TreeView.AfterCheck lösen (auch hier wieder rekursiv alle Unterknoten durchlaufen).
Und wieviele Ebenen hast du denn in deinem Baum (nur 2, oder, denn sonst klappt deine bisherige Funktion nicht)?