![]() |
TTreeView - Items mit SubItems anlegen
Hi,
ich möchte in einer TreeView folgende Struktur darstellen:
Code:
Mein aktueller Code sieht so aus:
-Item1
--SubItem1 --SubItem2 -Item2 --SubItem1 --SubItem2 etc...
Delphi-Quellcode:
Leider wird mir folgendes in der TreeView angezeigt:
procedure TfrmWizard.RefreshFileList;
var iPath, iFile: Integer; begin treeFiles.Items.BeginUpdate; try treeFiles.Items.Clear; for iPath := 0 to damData.Config.Paths.Count - 1 do begin treeFiles.Items.AddFirst(nil, ''); treeFiles.Items[iPath].Text := damData.Config.Paths[iPath].Path; treeFiles.Items[iPath].ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path); for iFile := 0 to damData.Config.Paths[iPath].Files.Count - 1 do begin treeFiles.Items.AddChild(treeFiles.Items[iPath], ''); treeFiles.Items[iPath].Item[iFile].Text := damData.Config.Paths[iPath].Files[iFile].FileName; treeFiles.Items[iPath].Item[iFile].ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path + damData.Config.Paths[iPath].Files[iFile].FileName); end; end; finally treeFiles.Items.EndUpdate; end; end;
Code:
Es werden also die Haupteinträge angelegt, jedoch nur der letzte beschriftet. Auch ist der letzte Eintrag der einzige der SubItems hat und zwar zuviele (deshalb erhalten auch nur die ersten SubItems eine Beschriftung).
-
- - - - - - - ... -Name vom letzten Item --Name erstes SubItem --Name zweites SubItem -- -- -- Anstatt AddFirst habe ich auch schon Add und AddChild versucht. Bei letzteren erhalte ich so eine Struktur:
Code:
Die Delphi-Hilfe hilft mir auch nicht. Wo liegt der Fehler?
-Item1
--SubItem1 --SubItem2 --Item2 ---SubItem1 etc... |
Re: TTreeView - Items mit SubItems anlegen
Hi
Wenn du einen Eintrag erstellst bekommst du ein Item zurück. Dieses kannst du dann an die Funktion AddChild übergeben und gut. Solltest du ein ImageIndex auch noch vergeben kommst du eh nicht darum herum.
Delphi-Quellcode:
var Item1,
Item2 : TTreeNode; begin Item1 := TreeView1.Items.AddChild(NIL,'Item1'); Item1.ImageIndex := 1; Item2 := TreeView1.Items.AddChild(Item1,'SubItem1'); Item2.ImageIndex := 2; end; |
Re: TTreeView - Items mit SubItems anlegen
Auf denen Code bezogen dann so
Delphi-Quellcode:
procedure TfrmWizard.RefreshFileList;
var iPath, iFile : Integer; Item1, Item2 : TTreeNode; begin treeFiles.Items.BeginUpdate; try treeFiles.Items.Clear; for iPath := 0 to damData.Config.Paths.Count - 1 do begin Item1 := treeFiles.Items.AddChild(nil, ''); Item1.Text := damData.Config.Paths[iPath].Path; Item1.ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path); for iFile := 0 to damData.Config.Paths[iPath].Files.Count - 1 do begin Item2 := treeFiles.Items.AddChild(Item1, ''); Item2.Text := damData.Config.Paths[iPath].Files[iFile].FileName; Item2.ImageIndex := damData.GetFileIcon(damData.Config.Paths[iPath].Path + damData.Config.Paths[iPath].Files[iFile].FileName); end; end; finally treeFiles.Items.EndUpdate; end; end; |
Re: TTreeView - Items mit SubItems anlegen
Dann war mein Fehler also das ich versucht habe mit treeFiles.Items[iPath] auf das neu erstelle Node zu zugreifen. :wall:
Dein Code funktioniert. Vielen Dank :thumb: |
Re: TTreeView - Items mit SubItems anlegen
Prinzipiell sollte dein Code auch funktionieren.
Meiner Menung nach liegt der Fehler in "treeFiles.Items.AddFirst(nil, '');" Damit stellst du den zweiten Node (B) vor den ersten (A) schreibst die Daten aber wieder an die zweite stelle (A). Erstes "AddFirst"
Delphi-Quellcode:
Erstes unterelement "AddChild(Imtes[0]"
+ NodeA[0]
Delphi-Quellcode:
zweites unterelement "AddChild(Imtes[0]"
+ NodeA[0]
+ NodeA.1[0]
Delphi-Quellcode:
Zweites "AddFirst"
+ NodeA[0]
+ NodeA.1[0] + NodeA.2[1]
Delphi-Quellcode:
Wenn du jetzt die Daten in den Node[1] schreibst überschreibst du den ersten (in zwischen nach unten geschobenen) Knoten!
+ NodeB[0] <------- Bleibt leer
+ NodeA[1] <------- Überschreiben + NodeA.1[0] + NodeA.2[1] Fügst du nun wieder ein unterelement hinzu so überschreibst du wieder die alten Daten.
Delphi-Quellcode:
+ NodeB[0]
+ NodeA[1] + NodeA.1[0] <------- Überschreiben + NodeA.2[1] <------- Überschreiben + NodeB.1[0] <------- Bleibt leer + NodeB.2[1] <------- Bleibt leer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:06 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