![]() |
Hilfe im Umgang mit TreeView
Hallo,
Habe eine TreeView die ungefähr so aussieht + Haupteintrag A - Bla 1 - Bla 2 - Bla 3 + Haupteintrag B - Bla 1 - Bla 2 - Bla 3 + Haupteintrag C - Bla 1 - Bla 2 - Bla 3 Jetzt möchte ich erreichen, das die Haupt-Noden mit den Unter-Noden aufgelistet werden: Haupteintrag A Bla 1 Haupteintrag A Bla 2 Haupteintrag A Bla 3 Haupteintrag B Bla 1 Haupteintrag B Bla 2 Haupteintrag B Bla 3 Haupteintrag C Bla 1 Ich bekomme das mit einer Schleife nicht irgendwie nicht hin weil, TreeView.Items.Count alle Einträge des TreeView greifen so das ich so am Ende "Doppel-Moppel". Is doof zuerklären...
Delphi-Quellcode:
Erzeugt folgende Ausgabe
for I := 0 to TreeView1.Items.Count-1 do
Memo1.Lines.Add(TreeView1.Items.Item[I].Text) Haupteintrag A Bla 1 Bla 2 Bla 3 Ich hoffe jemand versteht und erkennt das Problem :lol: |
Re: Hilfe im Umgang mit TreeView
|
Re: Hilfe im Umgang mit TreeView
Ich hoffe mal, das Problem richtig verstanden zu haben.
In dem Fall moechtest du nur die Blaetter des Baumes zurueckgeben, aber mit der "Wegbeschreibung" dorthin. An sich ist das nicht schwer. Um dich mal auf den Weg dorthin zu bringen: du hast bisher das: Zitat:
![]() Wenn also Count = 0 ist, dann ab mit dem Knoten in die Liste, ansonsten passiert eben nichts. So, und wie kriegt man jetzt den Ursprungsknoten: Der steht in Parent drinnen. Also kurz gesagt:
Code:
Allerdings funktioniert das nur, wenn der Baum max. Hoehe 2 hat. Und damit du keine Exception kriegst, wenn mal ein Node auf Level 0 keine Kinder hat, solltest du noch ueberpruefen, ob das Parent vom Item nil ist.
Fuer jedes Item:
Wenn keine Kinder vorhanden, dann: Fuege der Liste Hinzu: 'Haupteintrag ' + <item.parent.text> + ' Bla ' + <item.text> Wenn der Baum auch tiefer geht, dann wirds etwas komplizierter, aber es bleibt machbar :zwinker: greetz Mike [Add] Ich hab Matze's Beitrag zwar gesehn, wollts aber nicht umsonst geschrieben ham :P ;) |
Re: Hilfe im Umgang mit TreeView
Danke. Habe es grad allein hinbekommen.
Delphi-Quellcode:
5 Minuten später:
var
I, X: Integer; S: String; begin for I := 0 to TreeView1.Items.Count-1 do if TreeView1.Items.Item[I].Parent = nil then S := TreeView1.Items.Item[I].Text else Memo1.Lines.Add(S + ' ' + TreeView1.Items.Item[I].Text); end; // Edit: Naja dann doch nicht ganz.... da ja jetzte einige Hauptnoden übersprungen werden |
Re: Hilfe im Umgang mit TreeView
Guten Morgen.
Bei mir funktioniert es so:
Delphi-Quellcode:
Frohe Ostern
procedure GetLeaves(tn: TTreeNode; sLeaves, sParents: TStrings);
var tnChild: TTreeNode; begin if Assigned(sParents) then sParents.Add(tn.Text); if tn.HasChildren then begin tnChild := tn.getFirstChild; while Assigned(tnChild) do begin GetLeaves(tnChild, sLeaves, sParents); tnChild := tnChild.getNextSibling; end; end else if Assigned(sParents) then sLeaves.Add(sParents.DelimitedText) else sLeaves.Add(tn.Text); sParents.Delete(Pred(sParents.Count)); end; procedure TDemoForm.ButtonClick(Sender: TObject); var i: Integer; tn: TTreeNode; sParents: TStrings; begin Memo.Clear; Memo.Lines.BeginUpdate; tn := TreeView.Items.GetFirstNode; sParents := TStringList.Create; sParents.Delimiter := '\'; while Assigned(tn) do begin GetLeaves(tn, Memo.Lines, sParents); tn := tn.getNextSibling; end; sParents.Free; Memo.Lines.EndUpdate; end; marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:25 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