![]() |
TreeViews - Einträge löschen
Hallo,
ich habe in einem TreeView einige Knoten. Nun möchte ich - abhängig von Einstellungen - einzelne Einträge löschen bzw. unsichtbar machen. Durchlaufe ich alle Einträge des TreeViews, prüfe auf den Text und lösche sie dann, funktiniert dies zwar, beim kompilieren gibt es aber immer wieder Meldungen (durch den try-except Block) Wie kann ich elegant einzelne Einträge aus einem TreeView löschen, ohne dass der Compiler meckert und es auch noch nach lesbarem Code ausieht? Gruß Heiko |
Re: TreeViews - Einträge löschen
Zitat:
|
Re: TreeViews - Einträge löschen
Bereinigt um einigen Quatsch, so:
for I := 0 to frmHaupt.cxTreeView1.Items.Count - 1 do begin try if frmHaupt.cxTreeView1.Items[I].Text = 'EuroPlus' then begin frmHaupt.cxTreeView1.Items[i].Delete; end; except end; end; Gruß Heiko |
Re: TreeViews - Einträge löschen
Hallo,
also der Compiler meckert bestimmt nicht, sondern das Programm zur Laufzeit. Dreh deine Schleife einfach um
Delphi-Quellcode:
Und benutz bitte den Schalter "Delphi-Code" oben,
for i:= bla.Count-1 downto 0
um deinen Code ordentlich zu formatieren. Heiko |
Re: TreeViews - Einträge löschen
Moin, Moin,
Anmerkung/Frage am Rande: Meine mal irgendwo gelesen zu haben, dass man die Items-Eigenschaft im TreeView möglichst meiden sollte, da furchtbar (?) langsam. Besser wäre sich über die Knoten durch die Baumhierarchie zu bewegen (und wenn Eintrag gefunden zu löschen) - ist das richtig, oder irre ich in diesem Punkt? |
Re: TreeViews - Einträge löschen
>also der Compiler meckert bestimmt nicht,
>sondern das Programm zur Laufzeit. Nein! >Dreh deine Schleife einfach um werde ich mal probieren - Danke! >Und benutz bitte den Schalter "Delphi-Code" oben, >um deinen Code ordentlich zu formatieren. Danke auch für den "Anschiss" :-) Gruß Heiko |
Re: TreeViews - Einträge löschen
Moin,
noch eine Anmerkung zum Code von Heiko, damit er weiß, was falsch ist: Zu Beginn wird einmalig die Anzahl der Schleifendurchläufe ermittelt (Items.Count). Werden in der Schleife nun Einträge gelöscht, passt sich die Anzahl der Durchläufe nicht an und die Schleife läuft, sofern mindestens ein Eintrag entfernt wurde, immer zu weit. Somit wird auf Indizes zugegriffen, die es nicht mehr gibt. @taaktaak: Der Zugriff auf die VCL ist allgemein verhältnismäßig langsam. Ob es beim TreeView besonders ausgeprägt ist, weiß ich nicht, denke aber, dass man mit
Delphi-Quellcode:
einen deutlichen Performanceschub erreichen kann.
TreeView1.Items.BeginUpdate;
// hier mit den Items arbeiten (Löschen etc.) TreeView1.Items.EndUpdate; Grüße Edit: Da der Fehler "Ungültiger Index" oder wie auch immer, zur Laufzeit auftritt, ist es nicht der Compiler, der diesen Fehler anzeigt. Das Programm wurde bereits vollständig kompiliert, somit hat der Compiler ausgedient. |
Re: TreeViews - Einträge löschen
Zitat:
|
Re: TreeViews - Einträge löschen
Hallo,
taaktaak, Vom normalen TreeView hatte ich das auch gehört, bei VST weiss ich das nicht. Ich glaube mich aber zu erinnern, dass in der Advanced Demo auch das Suchen gezeigt wurde, und das war sehr fix. Ich mache das immer so. Liste aus DB laden (oder was auch immer angezeigt werden soll). Biem Items.Add( normaler Treeview) merke ich mir in meiner eigenen Klasse das TListItem. Zum Suchen benutze ich meine eigene Liste, nicth die das treeView. Zum Anzeigen benutze ich dann das TListItem. Heiko |
Re: TreeViews - Einträge löschen
@hoika
Dein Tipp den Code "umzudrehen" brachte das gewünschte Ergebnis - vielen Dank. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:59 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