Entwickler-Ecke
WinForms - treeview und Imagelist
coolace - Do 24.09.09 17:31
Titel: treeview und Imagelist
Hy,
ich bin seit Tagen wieder mal am googeln und mit der Boardsuche beschäftigt und komme nicht weiter :-(
Ich habe eine Treeview mit einer Root Node und unterschiedlich tiefen Child Notes
z.B.
-Node1
--Node2
---Node22
--Node2
--Node3
---Node33
usw.
Sobald ich das Programm starte ladet er die Struktur aus einer XML Datei danach versuch ich mit Hilfe
folgendem Codes das der Wurzelnode 1 bestimmtes Bild zugewiesen bekommt, das jeder Node der mit .pdf
endet ein bestimmtes Bild zugewiesen bekommt und die wo nicht unter die Kategorie Wurzelnode oder .pdf
fallen ein bestimmtes Bild zugewiesen bekommen
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| foreach (TreeNode temp in treeview.Nodes) { if (temp.Text.Trim().EndsWith(".pdf")) { treeview.ImageIndex = 1; } if (!temp.Text.Trim().Equals("RootNode")) { treeview.ImageIndex = 2; } else { treeview.ImageIndex = 0; } } |
Was mach ich hier falsch, alle bekommen nur das bild mit dem Index 0 zugewiesen aber nicht so wie ich das will
Gruß
Coolace
Ralf Jansen - Do 24.09.09 17:37
Zitat: |
Was mach ich hier falsch, |
Du setzt den ImageIndex des TreeViews, du solltest aber den ImageIndex des TreeNodes setzen.
coolace - Do 24.09.09 17:45
Hy,
vielen Dank für deine Hilfe, aber irgendwie klappt das mit
den Unternodes immer noch nicht hab statt
treeview.ImageIndex = 1; daraus treeview.SelectedNode.ImageIndex = 1
gemacht aber der beachtet das nicht ?
danielf - Do 24.09.09 18:01
Hallo,
wie Ralf gesagt hast, sollst du den ImageIndex von dem jeweiligen Node verändern.
Weißt du den was die Eigenschaft SelectedNode ist?
Hast du mal die msdn oder schnell Hilfe dazu gelesen?
Wie kommst du auf die Funktion?
Weiß einfach der Eigenschaft ImageKey von dem jeweiligen TreeNode den gewünschten ImageIndex zu.
z.B.
C#-Quelltext
1: 2: 3: 4:
| foreach (TreeNode treeElement in treeview.Nodes) { treeElement.ImageIndex = ImageIndexByText(treeElement.Text.Trim()); } |
Gruß Daniel
coolace - Do 24.09.09 18:28
Hy,
Ja, die SelectedNode ist der jeweils gerade ausgewählte Knoten, weiß zwar nicht ob das auch
gilt wenn er das mit der foreach schleife durchläuft.
Hab auch schon paar mal die msdn durchsucht nach der passenden Eigenschaft, aber ich find
Treeview ist irgendwie kein leichtes Thema.
Find die Klasse bei mir nicht ImageIndexByText(..); ?
Hab es mit treeElement.ImageIndex = Zahl ; probiert aber das Ergebnis passt
irgendwie nicht ?
Laut Debugger nimmt er nur den RootNode die Childnodes aber nicht
sorry und danke für die Hilfe
danielf - Fr 25.09.09 08:20
Hallo,
ImageIndexByText stellt eine Methode dar. Den Inhalt hattest du ja schon ...
Ich hab das mal für dich zusammen gefügt. Ich hoffe du machst dir troztdem genug gedanken, so dass du auch verstehst was du tust.
Bei Fragen kannst dich gerne melden.
Gruß Daniel
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:
| enum ImageIndex { PDF = 1, Root = 2, Default = 0 }
private void SetImageKeys(TreeView treeView) { foreach (TreeNode treeNode in treeView.Nodes) { treeNode.ImageIndex = ImageIndexByText(treeNode.Text.Trim()); } }
private int ImageIndexByText(string text) { if (text.EndsWith(".pdf")) { return (int)ImageIndex.PDF; } else if (text.Equals("RootNode")) { return (int)ImageIndex.Root; }
return (int)ImageIndex.Default; } |
coolace - Fr 25.09.09 11:47
Hy,
erstmal danke für die Hilfe.
Wenn ich das richtig verstehe hast du einen eigenen Datentyp mit den passenden Indexen erstellt.
Und übergibst der Funktion die den passenden int Wert zurückliefert nur den Text und die sucht
den passenden Index mit dem Bild heraus.
Soweit hab ich das kapiert, was ich nicht herausgefunden habe ist warum er nur den RootNode
in der foreach Schleife durchgeht aber sich nicht dazu bewegen lässt auch die darunter liegenden
Children Nodes anzuschauen.
Meine Hierachie besteht aus einem RootNode und divers verschachelten Childnodes.
Wie komm ich also an alle Childnodes ran ?
Bau den Treeview so auf in den entsprechenden Ereignissen
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| 1 Ebene kindknoten = new TreeNode(name); kindknoten.Text = name; Rootnode.Nodes.Add(kindknoten);
weitere Ebenen je nach dem welcher Knoten ausgewählt ist kindkindknoten = new TreeNode(); kindkindknoten.Text = uname; treeview.SelectedNode.Nodes.Add(kindkindknoten); |
danke und gruß
Coolace
danielf - Fr 25.09.09 11:59
Axo, nun verstehe ich dein Problem - du hast mehre "Unter"-Ebenen :)
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private void SetImageKeys(TreeView treeView) { SetImageKeys(treeView.Nodes); }
private void SetImageKeys(TreeNodeCollection treeNodes) { foreach (TreeNode treeNode in treeNodes) { SetImageKeys(treeNode.Nodes);
treeNode.ImageIndex = ImageIndexByText(treeNode.Text.Trim()); } } |
Der Durchlauf eines Baumes heißt auch: Traverse (Für deine Google-Suche).
Gruß Daniel
coolace - Fr 25.09.09 12:01
ja das ist noch mein letztes Problem :-)
das andere hab ich anhand des Codes verstanden.
Wie komm ich an die unteren ?
Danke und Gruß
Coolace
coolace - Fr 25.09.09 12:06
Cool des funktioniert super.
vielen vielen Dank für eure Hilfe und Geduld.
Damit ich das auch kapiere, an die unteren Nodes komm ich nur
über die TreeNodeCollection ?
coolace - Fr 25.09.09 13:22
Ideal, danke für die Antworten und die Erklärungen
I god it :-)
Gruß
Coolace
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!