AGB  ·  Datenschutz  ·  Impressum  







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

Hilfe im Umgang mit TreeView

Ein Thema von Kanne_Kaffe · begonnen am 15. Apr 2006 · letzter Beitrag vom 16. Apr 2006
Antwort Antwort
Kanne_Kaffe

Registriert seit: 10. Okt 2005
25 Beiträge
 
#1

Hilfe im Umgang mit TreeView

  Alt 15. Apr 2006, 22:18
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:
  for I := 0 to TreeView1.Items.Count-1 do
    Memo1.Lines.Add(TreeView1.Items.Item[I].Text)
Erzeugt folgende Ausgabe

Haupteintrag A
Bla 1
Bla 2
Bla 3


Ich hoffe jemand versteht und erkennt das Problem
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Hilfe im Umgang mit TreeView

  Alt 15. Apr 2006, 22:34
Hi,

mithilfe dieser Beiträge und Links müsstest du dir eine Funktion zusammenbasteln können.
  Mit Zitat antworten Zitat
Benutzerbild von JasonDX
JasonDX
(CodeLib-Manager)

Registriert seit: 5. Aug 2004
Ort: München
1.062 Beiträge
 
#3

Re: Hilfe im Umgang mit TreeView

  Alt 15. Apr 2006, 22:50
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 von Kanne_Kaffe:
Delphi-Quellcode:
  for I := 0 to TreeView1.Items.Count-1 do
    Memo1.Lines.Add(TreeView1.Items.Item[I].Text)
Um nur die Blaetter in die Liste zu kriegen fragst du einfach, wieviele Kinder der aktuelle Knoten hat. Die Eigenschaft Delphi-Referenz durchsuchenCount duerfte da hilfreich sein.
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:
Fuer jedes Item:
  Wenn keine Kinder vorhanden, dann:
    Fuege der Liste Hinzu: 'Haupteintrag ' + <item.parent.text> + ' Bla ' + <item.text>
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.
Wenn der Baum auch tiefer geht, dann wirds etwas komplizierter, aber es bleibt machbar

greetz
Mike

[Add] Ich hab Matze's Beitrag zwar gesehn, wollts aber nicht umsonst geschrieben ham
Mike
Passion is no replacement for reason
  Mit Zitat antworten Zitat
Kanne_Kaffe

Registriert seit: 10. Okt 2005
25 Beiträge
 
#4

Re: Hilfe im Umgang mit TreeView

  Alt 15. Apr 2006, 23:08
Danke. Habe es grad allein hinbekommen.
Delphi-Quellcode:
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;
5 Minuten später:
// Edit: Naja dann doch nicht ganz.... da ja jetzte einige Hauptnoden übersprungen werden
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Hilfe im Umgang mit TreeView

  Alt 16. Apr 2006, 06:32
Guten Morgen.

Bei mir funktioniert es so:

Delphi-Quellcode:
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;
Frohe Ostern

marabu
  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 00:25 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