Ajuda com Treeview

Delphi

20/07/2006

Tenho um TreeView com vários itens e subitens. exemplo abaixo:

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

Djorius

Curtidas 0

Respostas

Micheus

Micheus

20/07/2006

[b:8c5c4918e5]djorius[/b:8c5c4918e5], fazendo uso de recursividade, seria algo assim:
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;
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.


GOSTEI 0
POSTAR