AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

TreeViews - Einträge löschen

Ein Thema von sugar421 · begonnen am 28. Feb 2008 · letzter Beitrag vom 1. Mär 2008
Antwort Antwort
Seite 1 von 2  1 2   
sugar421

Registriert seit: 17. Mär 2007
18 Beiträge
 
#1

TreeViews - Einträge löschen

  Alt 28. Feb 2008, 20:01
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: TreeViews - Einträge löschen

  Alt 28. Feb 2008, 20:24
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?
Thomas
  Mit Zitat antworten Zitat
sugar421

Registriert seit: 17. Mär 2007
18 Beiträge
 
#3

Re: TreeViews - Einträge löschen

  Alt 29. Feb 2008, 08:23
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TreeViews - Einträge löschen

  Alt 29. Feb 2008, 08:27
Hallo,

also der Compiler meckert bestimmt nicht,
sondern das Programm zur Laufzeit.

Dreh deine Schleife einfach um

for i:= bla.Count-1 downto 0 Und benutz bitte den Schalter "Delphi-Code" oben,
um deinen Code ordentlich zu formatieren.


Heiko
Heiko
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#5

Re: TreeViews - Einträge löschen

  Alt 29. Feb 2008, 09:01
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?
Ralph
  Mit Zitat antworten Zitat
sugar421

Registriert seit: 17. Mär 2007
18 Beiträge
 
#6

Re: TreeViews - Einträge löschen

  Alt 29. Feb 2008, 09:18
>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
  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
 
#7

Re: TreeViews - Einträge löschen

  Alt 29. Feb 2008, 09:21
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.
  Mit Zitat antworten Zitat
Benutzerbild von Ralf Kaiser
Ralf Kaiser

Registriert seit: 21. Mär 2005
Ort: Wuppertal
932 Beiträge
 
Delphi 10.3 Rio
 
#8

Re: TreeViews - Einträge löschen

  Alt 29. Feb 2008, 09:22
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)
Ralf Kaiser
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.269 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: TreeViews - Einträge löschen

  Alt 29. Feb 2008, 09:36
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
Heiko
  Mit Zitat antworten Zitat
sugar421

Registriert seit: 17. Mär 2007
18 Beiträge
 
#10

Re: TreeViews - Einträge löschen

  Alt 1. Mär 2008, 07:03
@hoika

Dein Tipp den Code "umzudrehen" brachte das gewünschte Ergebnis - vielen Dank.

Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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