![]() |
TTreeview
Wenn ich einen Node in der Treeview auswähle kann ich ihn und seine nachfolger löschen. Dafür gibs die funktion TreeView1.Selected.Delete; ich hab aber in jeden Node ein Objekt gespeichert. Nun müßte ich den baum durchgehen (meine treeview hat immer nur 2 nachfolger) und die objekte destroyn. hat jemand eine idee wie ich das durchgehen kann?
|
Re: TTreeview
Delphi-Quellcode:
procedure durchgehen(var treenode : TTreenode);
begin if treenode.haschildren then begin durchgehen(treenode.getFirstChild); durchgehen(treenode.GetLastChild); end; TOperand(treenode.Data).destroy; end; geht das so? |
Re: TTreeview
ein TreeNode braucht man nicht als Var machen da es ein Object ist und somit ein pointer. Und um das ganze gleich richtig zu machen würde ich nicht nur das erste und letzte item durchgehen sondern mit einer schleife alle durchgehen.
|
Re: TTreeview
Ja hab gemerkt ich konnts nicht kompilieren mit dem Var. Aber gibts da vielleicht eine schon ausprogrammierte Variante wie man das Treeview durchgeht oder passt das so wie ich das jetzt geschrieben hab?
|
Re: TTreeview
das passt eigentlich so, man geht überlischerweise das ganze rekursiv durch so wie du es machst (mal abgesehen davon das du nur das erste und letzte item nimmst und nicht alle)
|
Re: TTreeview
Delphi-Quellcode:
ich kann höchstens nur 2 kinder anhängen. also ist das egal. nur frag ich mich wenn ich nur ein kind anhänge dann müsste getfirst und getlast das selbe sein oder? dann versucht er etwas zu löschen was schon gelöscht wurde.
if Treeview1.Selected.Count>=2 then
Neu1.Enabled:=false; |
Re: TTreeview
Zitat:
Delphi-Quellcode:
For i:=0 To MyTreeView.Items.Count - 1 do
DoSomethingWith (MyTreeView.Items[i]) |
Re: TTreeview
das mit dem index geht ganz langsam weil das intern so implementiert ist dass der das rekursiv durch geht.
|
Re: TTreeview
Zitat:
Beim Hochzählen, wie in meinem Schnipsel, wird einfach GetNext aufgerufen, und das ist sogar schneller als rekursives Durchlaufen (ca. 8%). |
Re: TTreeview
Delphi-Quellcode:
dabei wird der baum so oft nutzlos durchgelaufn..
For i:=0 To MyTreeView.Items.Count - 1 do
DoSomethingWith (MyTreeView.Items[i] |
Re: TTreeview
Ach. Einmal durchlaufen ist nutzlos? Wie kommst Du denn zu deinen Behauptungen? Im ComCtrls.Pas ist doch ganz klar definiert, wie der Zugriff auf die items per Index geregelt ist. Kannst Du nicht lesen?
Wenn du Recht hättest, must Du mir ne Kleinigkeit erklären: Wieso ist denn dann die iterative Variante schneller, als die angeblich so optimale Rekursive? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:48 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