Windows 10, Delphi 11.
Quero definir .Checked
apenas para filhos de um single TTreeNode
com caixas de seleção. Este é o comportamento padrão em TreeViews. Mas o código a seguir também seleciona todos os irmãos (no mesmo nível do nó inicial). Na verdade, a ligação Node.GetNextChild()
e Node.GetNextSibling()
não parecem fazer nenhuma diferença.
procedure TMapIntForm.CheckAllNodes(Node: TTreeNode; Check: Boolean);
var
AParent: TTreeNode;
begin
AParent := Node;
while (Node <> nil) do
begin
Node.Checked := Check;
CheckAllNodes(Node.GetFirstChild(), Check);
if Node <> TreeView.Selected then
Node := Node.GetNextChild(Node) // .GetNextSibling()?
else Node := nil;
end;
end;
Como verifico apenas os filhos de um nó em um determinado nível sem outros nós no mesmo nível?
Você está passando o nó errado para o
GetNextChild()
. Ele espera um nó filho de um nó pai no qual é chamado, mas em vez disso você está passando o próprio nó pai.Eu sugeriria usar um loop diferente para iterar os nós filhos: