![]() |
Objekt in Treeviewknoten speichern
Ich habe einen Treeview und würde da gerne zusätzlich in den Knoten noch ein Objekt ablegen. Allerdings kann ich keine Methode wie zum Beispiel AddObject finden in der Hilfe.
Und wo wir schon dabei sin, wüsste ich auch gerne, wie ich an das Objekt wieder dran komme. |
Re: Objekt in Treeviewknoten speichern
Die Klasse TreeNode kennt die Eigenschaft Tag welche vom Typ "Object" ist, da passt also alles rein. Du kannst deine TreeNode-Instanz entweder vorher erzeugen und diese dann per Add zum TreeView hinzufügen, oder aber du verwendest eine der anderen Add-Methoden die diverse String und Int32 Parameter nehmen. Alle diese Add-Methoden geben die erzeugte TreeNode-Instanz zurück, sodass du bei dieser dann die Tag-Eigenschaft setzen kannst.
LG, Manuel |
Re: Objekt in Treeviewknoten speichern
ah son mist hab übersehn das es C# sein soll :(
|
Re: Objekt in Treeviewknoten speichern
Zitat:
Sieht jetzt so aus:
Code:
Ich habe jetzt noch das Problem, wie ich da wieder drankomme:
for (int i = 0; i < catalog.Categories.Count; i++)
{ treeCatalog.Nodes.Add("2", catalog.Categories[i].Name, 0, 0); for (int j = 0; j < catalog.Categories[i].ProductList.Count; j++) { TreeNode prodNode = new TreeNode(); prodNode.Text = catalog.Categories[i].ProductList[j].Name; prodNode.Tag = catalog.Categories[i].ProductList[j]; treeCatalog.Nodes[i].Nodes.Add(prodNode); } }
Code:
Der Cast scheint nicht zu funktionieren.
string s;
s = (ProductItem)treeCatalog.SelectedNode.Tag |
Re: Objekt in Treeviewknoten speichern
Was heißt denn, er scheint nicht zu funktionieren? Wenn der C-style Cast nicht geht, wirft er eine Exception. Ich für meinen Teil neige dazu, wenn ich schonmal was in einer Tag-Eigenschaft speichere, diese dann mit is oder as (je nach Verwendung) zu testen bzw. zu casten. Hatte eigentlich bisher keine Probleme. Der Debugger verrät dir aber sonst auch sehr gerne, welchen Typ das Objekt in der Tag-Eigenschaft hat.
|
Re: Objekt in Treeviewknoten speichern
Zitat:
Ich werde es mal mit dem as Operator probieren. So geht's:
Code:
private void treeCatalog_AfterSelect(object sender, TreeViewEventArgs e)
{ if (treeCatalog.SelectedNode.Tag != null) { ProductItem prodItem; prodItem = (treeCatalog.SelectedNode.Tag as ProductItem); textProdInfo.Text = prodItem.Name + Environment.NewLine; textProdInfo.Text += prodItem.ShortDescription + Environment.NewLine; textProdInfo.Text += prodItem.LongDescription + Environment.NewLine; textProdInfo.Text += prodItem.ItemIdentifier + Environment.NewLine; } } |
Re: Objekt in Treeviewknoten speichern
Kleiner ergänzender Tipp aus meiner Gewohnheit: Statt
Code:
kannst du auch eine der folgenden Möglichkeiten wählen:
if (treeCatalog.SelectedNode.Tag != null)
{ ProductItem prodItem; prodItem = (treeCatalog.SelectedNode.Tag as ProductItem);
Code:
oder
if (treeCatalog.SelectedNode.Tag is ProductItem) {
ProductItem prodItem = treeCatalog.SelectedNode.Tag as ProductItem; ... }
Code:
Ist in meinen Augen übersichtlicher, weil schneller ersichtlich wird, was man vorhat. Wenn du C# 3.0 verwenden kannst macht var das natürlich noch kürzer, der Compiler kann aus dem as-Cast den Typ ermitteln. Geht übrigens auch, wenn man .NET-Framework 2.0 als Target hat.
ProductItem prodItem = treeCatalog.SelectedNode.Tag as ProductItem;
if (prodItem != null) { ... } |
Re: Objekt in Treeviewknoten speichern
Danke für den Tipp. Komme eben eher so aus der Delphi Welt. ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz