![]() |
Zugriffsverletzung bei JVTreeView
Hi,
ich bekomme dauernd Zugriffsfehler beim Verarbeiten einer JVTreeView. Ich habe folgende Daten + Eintrag1 |-- Mustermann |-- Max |-- 12345 + Eintrag2 |-- Musterfrau |-- Maxi |-- 67890 Ich möchte jetzt mit einer Schleife jeweils das erste "Child" ändern (in dem Fall Mustermann und Musterfrau). Wie kann ich das machen? |
Re: Zugriffsverletzung bei JVTreeView
Hallo Christian,
das funktioniert wie bei der Standardkomponente auch:
Delphi-Quellcode:
Grüße vom marabu
procedure TDemoForm.EditButtonClick(Sender: TObject);
var TreeNodes: TTreeNodes; i: Integer; begin TreeNodes := TreeView.Items; for i := 0 to Pred(TreeNodes.Count) do DoProcess(TreeNodes[i].getFirstChild); end; |
Re: Zugriffsverletzung bei JVTreeView
Leider nein. :roll:
DoProcess wird nicht erkannt. |
Re: Zugriffsverletzung bei JVTreeView
DoProcess() ist doch nur mein Platzhalter für deinen Code...
marabu |
Re: Zugriffsverletzung bei JVTreeView
Das ist ja gerade das Problem, da bekomme ich eine Zugriffsverletzung. Was muss ich denn da reinschreiben, wenn ich immer das erste Child ändern will? Ich hab schon einiges probiert...
|
Re: Zugriffsverletzung bei JVTreeView
Sorry - beim Iterieren über all Nodes werden ja auch solche besucht, die dich gar nicht interessieren. Dieser Code ist getestet:
Delphi-Quellcode:
marabu
procedure TDemoForm.DoProcess(tn: TTreeNode);
begin tn.Text := Uppercase(tn.Text); end; procedure TDemoForm.ProcessButtonClick(Sender: TObject); var Nodes: TTreeNodes; tn: TTreeNode; begin Nodes := TreeView.Items; tn := Nodes.GetFirstNode; while Assigned(tn) do begin DoProcess(tn.getFirstChild); tn := tn.getNextSibling; end; end; |
Re: Zugriffsverletzung bei JVTreeView
Okay danke, das geht nun soweit.
Ich möchte nun aber alle Childs ändern und das auf ein mal. Ich habs erst mal mit ShowMessage Dialogen versucht und da komme ich schon nicht weiter:
Delphi-Quellcode:
Die erste zeigt mir "0" an - richtig.
showmessage(TreeNode.GetFirstChild.Text);
showmessage(treenode.GetNext.Text); showmessage(TreeNode.GetLastChild.Text); Die zweiter zeigt mir aber auch "0" an - falsch. die letzte zeigt mir "gude" an - richtig. Wieso ist mein 2.Aufruf falsch? |
Re: Zugriffsverletzung bei JVTreeView
GetNext() liefert einfach den nächsten Knoten. Das kann ein Knoten auf einer beliebigen Ebene sein. Wenn du alle direkten Unterknoten eines Knotens sehen willst, dann mache es so:
Delphi-Quellcode:
marabu
procedure TDemoForm.ShowChildren(tn: TTreeNode);
begin tn := tn.GetFirstChild; while Assigned(tn) do begin ShowMessage(tn.Text); tn := tn.GetNextSibling; end; end; |
Re: Zugriffsverletzung bei JVTreeView
Jetzt bekomme ich aber nur den ersten Eintrag im TreeView angezeigt. Wenn ich nun beide Lösungen von dir kombiniere, bekomme ich schon wieder Zugriffsverletzungen :(
|
Re: Zugriffsverletzung bei JVTreeView
Die Zugriffsverletzungen könnten durch deine Kombination der Codes bedingt sein. Hier übernehme ich den Code von ShowChildren() nach DoProcess() und passe den Aufruf so an, dass für alle Knoten auf der ersten Ebene die direkten Unterknoten ausgegeben werden - ungetestet:
Delphi-Quellcode:
marabu
procedure TDemoForm.DoProcess(tn: TTreeNode);
begin tn := tn.GetFirstChild; while Assigned(tn) do begin ShowMessage(tn.Text); tn := tn.GetNextSibling; end; end; procedure TDemoForm.ProcessButtonClick(Sender: TObject); var tn: TTreeNode; begin tn := TreeView.Items.GetFirstNode; while Assigned(tn) do begin DoProcess(tn); tn := tn.getNextSibling; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:10 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