Der Grund für die Endlosschleife ist in den beiden markierten Zeilen;
if (Node.Level = 0) and Node.HasChildren then
begin
Sel_Node := Node.getNextSibling; // here
while Assigned(Sel_Node) do
begin
Sel_Node.Selected := True;
Sel_Node := Node.getNextSibling; // and here
end;
end;
Der Knoten Node
bleibt gleich bei jeder Iteration, damit der Knoten Sel_Node
ist auch das gleiche bei jeder Iteration und die Bedingung Assigned(Sel_Node)
nie falsch wird. Vielleicht möchten wir Sie
Sel_Node := Sel_Node.getNextSibling;
im while
Schleife schreiben?
Da der Header dieser Frage sagt "Wählen Sie alle untergeordneten Elemente von einem Knoten in treeview" Ich frage mich, warum Sie nur die Geschwisterknoten und nicht Kindknoten erhalten? Es ist nicht wirklich klar, was Sie zu erreichen versuchen.
Für ein Beispiel zum rekursiven Durchlaufen der Knoten können Sie sich auf this link beziehen.
bearbeiten nach Kommentare:
Mit TreeView1
Eigenschaften MultiSelect = True
und MultiSelectStyle = [msControlSelect]
und die rekursive Suche für Kinder und Geschwister Anwendung I verknüpft der Code, alle Kinder unter einem bereits ausgewählten Knoten mit level = 0
auszuwählen, sieht f .Ex. wie folgt aus:
procedure TForm1.SelectChildren(ANode: TTreeNode);
begin
ANode := ANode.GetFirstChild;
if ANode = nil then Exit;
repeat
TreeView1.Select(ANode, [ssCtrl]);
SelectChildren(ANode);
ANode := ANode.getNextSibling;
until ANode = nil;
end;
procedure TForm1.Button5Click(Sender: TObject);
var
Node: TTreeNode;
begin
if (TreeView1.Selected <> nil) and
(TreeView1.Selected.Level <> 0) then Exit;
Node := TreeView1.Selected;
SelectChildren(Node);
end;
möchte ich alle Kind von einem perticular Knoten auszuwählen programmatisch –
Ich glaube, ich Ihre Frage beantwortet „* Was ist das Problem mit dem Code unten ist Sein in einer Endlosschleife * gehen.“. Ich habe auch einen Link zu einem Beispiel bereitgestellt, wie alle Kinder eines Treenodes rekursiv gefunden werden können. –
Das war meine nächste Frage aber :) reparierte die unendliche Sache, aber die Multiselektion geschah nicht –