AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Objekt in Treeviewknoten speichern

Ein Thema von Luckie · begonnen am 9. Mai 2008 · letzter Beitrag vom 9. Mai 2008
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

Objekt in Treeviewknoten speichern

  Alt 9. Mai 2008, 09:48
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#2

Re: Objekt in Treeviewknoten speichern

  Alt 9. Mai 2008, 10:03
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
Manuel Pöter
  Mit Zitat antworten Zitat
Kalfany

Registriert seit: 28. Feb 2008
Ort: München
153 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Objekt in Treeviewknoten speichern

  Alt 9. Mai 2008, 10:22
ah son mist hab übersehn das es C# sein soll
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Objekt in Treeviewknoten speichern

  Alt 9. Mai 2008, 10:29
Zitat von Motzi:
Die Klasse TreeNode kennt die Eigenschaft Tag welche vom Typ "Object" ist,
Oh, das habe ich nicht gesehen. Danke.

Sieht jetzt so aus:
Code:
 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);                      
                    }
                }
Ich habe jetzt noch das Problem, wie ich da wieder drankomme:
Code:
string s;
s = (ProductItem)treeCatalog.SelectedNode.Tag
Der Cast scheint nicht zu funktionieren.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#5

Re: Objekt in Treeviewknoten speichern

  Alt 9. Mai 2008, 10:52
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Objekt in Treeviewknoten speichern

  Alt 9. Mai 2008, 11:04
Zitat von Luckie:
Ich habe jetzt noch das Problem, wie ich da wieder drankomme:
Code:
string s;
s = (ProductItem)treeCatalog.SelectedNode.Tag
Der Cast scheint nicht zu funktionieren.
Damit meinte ich, dass die IDE mir, wenn ich den Punkt setze, nicht die Objekteigenschaften anzeigt.

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;
            }
        }
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
OregonGhost

Registriert seit: 8. Jun 2002
Ort: Lübeck
1.216 Beiträge
 
Delphi 3 Professional
 
#7

Re: Objekt in Treeviewknoten speichern

  Alt 9. Mai 2008, 12:03
Kleiner ergänzender Tipp aus meiner Gewohnheit: Statt
Code:
            if (treeCatalog.SelectedNode.Tag != null)
            {
                ProductItem prodItem;
                prodItem = (treeCatalog.SelectedNode.Tag as ProductItem);
kannst du auch eine der folgenden Möglichkeiten wählen:
Code:
if (treeCatalog.SelectedNode.Tag is ProductItem) {
    ProductItem prodItem = treeCatalog.SelectedNode.Tag as ProductItem;
    ...
}
oder
Code:
ProductItem prodItem = treeCatalog.SelectedNode.Tag as ProductItem;
if (prodItem != null) {
    ...
}
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.
Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Objekt in Treeviewknoten speichern

  Alt 9. Mai 2008, 12:05
Danke für den Tipp. Komme eben eher so aus der Delphi Welt.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz