Newsgroup: it.comp.lang.delphi
Titolo: TreeView - Delete

Ciao Ragazzi,
da qualche ora sto sbattendo la testa su come cancellare un nodo di un
TreeView senza cancellare i relativi Children
Es. di istruzioni
tw1.Items[10].Delete;
tw1Selected.DeleteChildren;
Esiste qualche modo ?

 TreeView senza cancellare i relativi Children
Non ho capito. Tu vuoi cancellare un nodo senza cancellare i suoi 
sottonodi? E a cosa si attaccherebbero questi ultimi se non venissero 
cancellati?
-- 
Jax

 cancellati?
Grazie per la risposta.
Naturalmente prima viene fatto un controllo di compatibilità con
l'operazione.
Nel caso di relazioni uno a molti non verrebbe applicato il Delete.
Esempio:
A-->B-->C
Relazioni uno a uno può essere cancellato B e C si attacca ad A.
La tua affermazione però mi fa riflettere sulla necessità di gestire
l'operazione con manipolazioni meno semplici.

Mi sa che ci siamo confusi.
Per forza esiste un unico padre e quindi in ogni caso è possibile il
delete di un sottonodo portando al padre i suoi figli.
A-->B-->C+D+E
cancello B
A-->C+D+E
C+D+E diventano figli di A

 C+D+E diventano figli di A
A quanto ne so, non è una cosa che si fa automaticamente, ma 
manualmente: prima fai diventare (a mano) C+D+E figli di A, e poi 
cancelli B.
Non ho sottomano la guida ma potrebbe esserci anche una funzione che 
perlomeno "sposta" tutti i figli di un nodo su un altro nodo.
Però, scusami se insisto: un'operazione del genere non è intuitiva, per 
il semplice motivo che il tipico utilizzo di un treeview (e quindi 
quello che si aspetta l'utente medio) è quello delle cartelle di 
windows: quando tu cancelli una cartella, anche le sottocartelle vengono 
eliminate.
Secondo me genereresti solo confusione a rendere l'operazione di 
spostamento automatica durante la cancellazione.
-- 
Jax

 
Matteo.Mira...@gmail.com
 ha scritto:

Purtroppo non ho scelta, è una struttura gerarchica nella quale si
tolgono e inseriscono componenti differenti.
Proverò a fare un move to come mi consigli.
Ti ringrazio molto per l'aiuto
Ciao
Matteo

procedure TForm1.A_DeleteSingolo;
label SALTA;
var DA,A,P : integer; CurItem : TTreeNode;
procedure TROVA_PADRE;
label ESCI;
var Labs, Lrel  : Integer;
begin
A_AlberoMIRROR.Select(A_AlberoMIRROR.Items[DA]); 
CurItem:=A_AlberoMIRROR.Selected;
Labs:=A_AlberoMirror.Items[A_AlberoMirror.Selected.AbsoluteIndex].Level;
Repeat
while (CurItem <> nil) do
  begin
   CurItem:=CurItem.GetPrev;
   if CurItem <> nil then begin A_AlberoMirror.Select(CurItem);
   Lrel:=A_AlberoMirror.Items
[A_AlberoMirror.Selected.AbsoluteIndex].Level; end;
   if Lrel=Labs-1 then begin P:=A_AlberoMirror.Selected.AbsoluteIndex; 
goto ESCI; end;
  end;
Until Lrel=Labs-1;
ESCI:
end;
begin
// AbsoluteIndex - Nodo di partenza
DA:=A_AlberoNavigazione.selected.AbsoluteIndex;
// Determina il valore del padre P del item selezionato
TROVA_PADRE;
// SPOSTA TUTTI I FIGLI SUL PADRE
While CurItem <> nil do
begin
A_AlberoMirror.Select(A_AlberoMirror.Items[DA]);
CurItem:=A_AlberoMirror.Selected;
if CurItem.getFirstChild <> nil then CurItem:=CurItem.getFirstChild Else 
goto SALTA;
A_AlberoMirror.Select(CurItem);
A_AlberoMirror.Selected.MoveTo(A_AlberoMirror.Items[P],naAddChild);
end;
SALTA:
// Cancella il nodo che si voleva cancellare
A_AlberoMirror.Select(A_AlberoMirror.Items[DA]);
A_AlberoMirror.Selected.Delete;
end;
--- posted by geoForum on 
http://www.delphiedintorni.it

 var DA,A,P : integer; CurItem : TTreeNode;
<snip>
Grazie per aver postato la soluzione al tuo problema!
-- 
Jax

Grazie ma avevo già risolto. Direi un po' ridondante


Se trovi qualcosa di meno ridondante postamelo !
