Fórum Ajuda com Treeview #325726
20/07/2006
0
Tenho um TreeView com vários itens e subitens. exemplo abaixo:
Em um determinado ponto o usuário informa que deseja excluir o ´Item 3´, que tem como sub-itens o ´item 7´ e o ´item 10´. o ´item 7´ por sua vez possui dois sub-itens: o ´item 8´ e o ´item 9´. O problema é que eu não posso simplesmente excluir o ´Item 3´ direto. Eu preciso criar um loop que passe em todos os itens e sub-itens do ´Item 3´, cada um de uma vez... Como posso fazer isso?
Item 1 | |---- Item 2 | |--- Item 4 | |--- Item 5 | |--- Item 6 | |---- Item 3 | |--- Item 7 |---------------- |--- Item 8 | |--- Item 9 | |--- Item 10
Em um determinado ponto o usuário informa que deseja excluir o ´Item 3´, que tem como sub-itens o ´item 7´ e o ´item 10´. o ´item 7´ por sua vez possui dois sub-itens: o ´item 8´ e o ´item 9´. O problema é que eu não posso simplesmente excluir o ´Item 3´ direto. Eu preciso criar um loop que passe em todos os itens e sub-itens do ´Item 3´, cada um de uma vez... Como posso fazer isso?
Djorius
Curtir tópico
+ 0
Responder
Posts
20/07/2006
Micheus
[b:8c5c4918e5]djorius[/b:8c5c4918e5], fazendo uso de recursividade, seria algo assim:Não passe o nó desejado (neste exemplo o selected, no seu caso 3 e 7) para a chamada inicial a ClearChild, pois resultará em excluir todos os nós abaixo do mesmo (filhos e irmãos). Se não tiver muita certeza sobre o que estará ocorrendo neste procedimento, aconselho a colocar um break-point na primeira lina de ClearChild e adicionar a Watch List (CTRL+F5) a variável ChildTree.Text; Assim, a cada parada no break, vc poderá acompanhar por onde a rotina está andando e compreender melhor como funciona.
procedure TForm1.Button5Click(Sender: TObject); procedure ClearChild(ChildTree :TTreeNode); begin if Assigned(ChildTree) then begin // Nova chamada ao procedimento passando o nó filho ClearChild(ChildTree.GetFirstChild); // Nova chamada ao procedimento passando o nó irmão ClearChild(ChildTree.GetNextSibling); // Se tiver armazenado algum objeto na propriedade // ChildTree.Data, o momento de liberá-lo é aqui // Após ter varrido os nós filhos e irmãos, // quando chegou a última folha, deleta-a ChildTree.Delete; end; end; begin if Assigned(TreeView2.Selected) then begin ClearChild(TreeView2.Selected.getFirstChild); TreeView2.Selected.Delete; end; end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)