Delphi-PRAXiS

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 Löschen von TreeView-Items (https://www.delphipraxis.net/3466-loeschen-von-treeview-items.html)

EinDelphianer 14. Mär 2003 13:30


Löschen von TreeView-Items
 
Hi an alle!
Ich hab leider ein Problem beim löschen von TreeView. Ich habe die Variable "Node" (TTreeNode)" deklariert. Wenn ich auf das TreeView klicke, wird dieser Variable das Selektierte Node zugewiesen.
Code:
  Node := TreeView.Selected
Jetzt aber mal zu meinem eigentliche Problem:
Ich will alle Subitems des Nodes löschen (sofern dieser welche hat), wenn er selekiert ist. Dazu hab ich folgendes versucht:
Delphi-Quellcode:
  if Node.HasChildren then
  begin
    For i := 0 to Node.Count - 1 do
    begin
      TreeView.Items.Delete(Node.Item[i]);

      If not Node.HasChildren then
      begin
        Break;
        TreeView.Items.Delete(Node);
      end;
    end;
  end;
:?: Mir ist nicht klar, warum hier eine Fehlermeldung kommt. ("Der Listenindex überschreitet das Maximum (0)")

Wäre über jede Hilfe dankbar :spin:

MfG

Daniel B 14. Mär 2003 13:34

Re: Löschen von TreeView-Items
 
Hallo,
Zitat:

Zitat von EinDelphianer
:?: Mir ist nicht klar, warum hier eine Fehlermeldung kommt. ("Der Listenindex überschreitet das Maximum (0)")

Anscheinend versuchst Du was zu löschen was es gar nicht gibt, bzw. Du greifst auf etwas zu das nicht existiert.
Du solltest mal die Schleife Debuggen, bringt Dich sicherlich weiter.

Grüsse, Daniel :hi:

sakura 14. Mär 2003 13:37

Du musst die Nodes rückwärts durchlaufen ;-)
Aus
Delphi-Quellcode:
For i := 0 to Node.Count - 1 do
wird
Delphi-Quellcode:
For i := Node.Count - 1 downto 0 do
...:cat:...

Luckie 14. Mär 2003 13:41

Und die Begründung:
Die Schleife läuft zum Beispiel von 0 bis 9. Es sind also 10 Elemente vorhanden. Löscht du jetzt eins sind es nur noch 9. Deine Schleife läuft aber bis 10, ergo greifst du auf ein Element zu, welches es nicht mehr gibt.

EinDelphianer 14. Mär 2003 13:55

Vielen Dank für solch eine schnelle Hilfe. Jetzt ist mir ein Lichtlein aufgegangen. Hab danach auch sofort noch einen anderen Fehler beseitigt.
Code:
      If not Node.HasChildren then
      begin
        Break;
        TreeView.Items.Delete(Node);
      end;
Das konnte natürlich auch nicht funktionieren, aber ich hab es jetzt so hinbekommen, dass es funktioniert.
Nochmals vielen Dank für eure schnelle und vorzüglich Hilfe!!! Danke, Danke, Danke... :spin:

MfG

EinDelphianer 14. Mär 2003 14:07

Eine kurze Frage noch. Wenn ich nur ein Selektiertes SubItem löschen will (was auch einwandfrei bei mir klappt), wie bekomme ich dann heraus, ob es das letzt SubItem ist?

Vielen Dank für weitere Hilfe!

MfG

EinDelphianer 14. Mär 2003 15:02

Habs schon hinbekommen! :dancer: :bouncing4: :bounce1: :bounce2: :hello: :coder:

MfG


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:29 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