![]() |
[TreeView] Mit Pfad zu Node springen
Hallo DPler :hi:
Wie kann ich, wenn ich den "Pfad" zum Node habe, auch zum entsprechenden Node springen? Der pfad liegt in der Form "Knoten\Unterknoten\..." vor. Überlegt habe ich mir jeweils die Einzelnen Knoten per
Delphi-Quellcode:
in einer Schleife zu suchen und dann jeweils zum Subknoten zu springen, was aber bestimmt zu kompliziert gedacht ist :D
Rest := Suchtext;
Knoten[i] := LeftStr(Rest,Pos('\',Suchtext)); Rest := RightStr(Suchtext,Length(Suchtext)-Pos('\',Suchtext)); Hoffe ihr könnt mir helfen. |
Re: [TreeView] Mit Pfad zu Node springen
Hi,
kann ja sein, dass es noch einfacher geht, aber so funktioniert es bei mir.
Delphi-Quellcode:
function function SelectNode(Pfad: AnsiString; Tv: TTreeView): boolean;
var Sl: TStrings; i: integer; Node: TTreeNode; begin Result:= false; Pfad:= StringReplace(Pfad,'\', #13#10, [rfReplaceAll]); Sl:= TStringList.Create; try Sl.Text:= Pfad; Node:= Tv.TopItem; for i:= 0 to sl.Count- 1 do begin while Assigned(Node) do begin if node.Text= sl.Strings[i] then begin if i= sl.Count- 1 then begin Result:= true; Node.Selected:= Result; end; break; end; Node:= Node.GetNextSibling; end; if Assigned(Node) then Node:= Node.GetFirstChild; end; finally Sl.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if SelectNode('1\2', TreeView1) then beep; end; |
Re: [TreeView] Mit Pfad zu Node springen
Ich werds mir mal anschauen, danke :thumb:
|
Re: [TreeView] Mit Pfad zu Node springen
Hier noch eine Alternative ohne Verwendung einer StringList. Aufruf erfolgt analog, zusätzlich ist das Trennzeichen anzugeben (könnte natürlich auch fest "verdrahtet" werden):
Delphi-Quellcode:
function SelectNode(Path:String;Delimiter:Char;Tree:TTreeView):Boolean;
var p : Integer; SubStr : String; aNode, orgSel : TTreeNode; begin orgSel:=Tree.Selected; aNode :=Tree.TopItem; repeat p:=pos(Delimiter,Path); if p=0 then SubStr:=Path else begin SubStr:=copy(Path,1,pred(p)); delete(Path,1,p); end; while (aNode.Text<>SubStr) and (aNode.GetNextChild(aNode)<>nil) do aNode:=aNode.getNextChild(aNode); if aNode<>nil then begin Tree.Selected:=aNode; aNode:=aNode.getFirstChild; end; until (p=0) or (aNode=nil); Result:=(Tree.Selected.Text=SubStr); if not(Result) then Tree.Selected:=orgSel end; |
Re: [TreeView] Mit Pfad zu Node springen
Fairerweise muss allerdings gesagt werden, dass die erste Lösung (wie ich jetzt leider feststellen musste) etwa 20x schneller ist - also klare Entscheidung für die Stringlisten-Version von bitsetter :hi:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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