Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TreeViews - Einträge löschen (https://www.delphipraxis.net/109360-treeviews-eintraege-loeschen.html)

sugar421 28. Feb 2008 19:01


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

toms 28. Feb 2008 19:24

Re: TreeViews - Einträge löschen
 
Zitat:

Zitat von sugar421
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)

Hallo, wie sieht denn dein jetziger Code aus?

sugar421 29. Feb 2008 07:23

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

hoika 29. Feb 2008 07:27

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:
for i:= bla.Count-1 downto 0
Und benutz bitte den Schalter "Delphi-Code" oben,
um deinen Code ordentlich zu formatieren.


Heiko

taaktaak 29. Feb 2008 08:01

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?

sugar421 29. Feb 2008 08:18

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

Matze 29. Feb 2008 08:21

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:
TreeView1.Items.BeginUpdate;
// hier mit den Items arbeiten (Löschen etc.)
TreeView1.Items.EndUpdate;
einen deutlichen Performanceschub erreichen kann.

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.

Ralf Kaiser 29. Feb 2008 08:22

Re: TreeViews - Einträge löschen
 
Zitat:

Zitat von sugar421
>also der Compiler meckert bestimmt nicht,
>sondern das Programm zur Laufzeit.

Nein!

Wenn der compiler wirklich "meckert" dann hindert dich ja nichts daran und diese Fehlermeldung auch mal zu zeigen, oder? (Es ist im Moment keine Saison für Wahrsager-Glaskugeln)

hoika 29. Feb 2008 08:36

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

sugar421 1. Mär 2008 06:03

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 21:46 Uhr.
Seite 1 von 2  1 2      

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