AGB  ·  Datenschutz  ·  Impressum  







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

TTreenode Problem mit getNextSibling

Ein Thema von Redfox · begonnen am 13. Feb 2006 · letzter Beitrag vom 13. Feb 2006
 
marabu

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

Re: TTreenode Problem mit getNextSibling

  Alt 13. Feb 2006, 18:30
Auch wenn du schon eine Weile mitgelesen hast - herzlich willkommen in der Delphi-PRAXiS, Daniel.

Dein Code lässt sich noch etwas verbessern:

Delphi-Quellcode:
function TForm1.IsOrphan(tn: TTreeNode): Boolean;
begin
  Result := (PNodeDaten(tn.Data).ParentId > 0)
    and (tn.Level = 0);
end;

procedure TForm1.PurgeButtonClick(Sender: TObject);
var
  tnThis, tnNext: TTreeNode;
begin
  tnThis := Treeview.Items.GetFirstNode;
  while Assigned(tnThis) do
  begin
    tnNext := tnThis.getNextSibling;
    if isOrphan(tnThis) then
      tnThis.Delete;
    tnThis := tnNext;
  end;
end;
Wenn der Speicher, auf den der im property Data abgelegte Pointer verweist, beim Delete des Knoten frei gegeben werden muss, dann kannst du das elegant im Ereignis OnDelete der TreeView erledigen.

Soviel zum Code - aber auch dein Ansatz ist verbesserungsfähig. Warum hängst du alle Daten zuerst als top level nodes in die TreeView? Wenn die Daten in einer selbst-rekursiven Tabelle gespeichert vorliegen, dann kannst du sie bei geigneter Sortierung direkt an der richtigen Stelle einfügen.

Oft reicht auch eine simple Datensatznummer, hinterlegt in der Eigenschaft Data des Knoten, um den Bezug zu den Tabellendaten herstellen zu können.

Grüße vom marabu
  Mit Zitat antworten Zitat
 


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 03: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