PDA

View Full Version : [c#] spostare i nodi in un treeview


zebrone
20-07-2006, 16:17
In un componente treeView di visual c# 2.0 (Visual Studio 2005) devo implementare la funzionalitą che permette di spostare su e gił i nodi all'interno dello stesso livello, in pratica vorrei poter cambiare l'ordine dei figli di un certo nodo, ad esempio:

Padre
+---Figlio1
+---Figlio2
+---Figlio3

deve poter diventare

Padre
+---Figlio3
+---Figlio1
+---Figlio2

Sono riuscito a farlo per le foglie, ma per i rami (quindi nodi con figli) non sono riuscito a trovare metodi per inserire nodi che prendessero rami dell'albero come parametri, avete idea di come si possa fare?

zebrone
21-07-2006, 08:59
Alla fine sono riuscito, posto il codice nel caso servisse a qualcun altro:


private void moveUpToolStripMenuItem_Click(object sender, EventArgs e)
{
if (treeView1.SelectedNode != null)
{
//Memorizzo il padre del nodo che sto spostando:
//il nodo spostato sarą ancora figlio suo con indice diminuito di 1
TreeNode parent = treeView1.SelectedNode.Parent;
//memorizzo la posizione originale del nodo prima dello spostamento
int originalIndex = treeView1.SelectedNode.Index;
//memorizzo l'intero ramo da spostare
TreeNode branch = treeView1.SelectedNode.Clone() as TreeNode;
//elimino il nodo dalla vecchia posizione
treeView1.SelectedNode.Remove();
try
{
if (parent == null) //se non ho parent sono al livello della radice
{
treeView1.Nodes.Insert(--originalIndex, branch);
}
else //non sono a livello della radice
{
//inserisco un nodo identico nella posizione appena sopra
parent.Nodes.Insert(--originalIndex, branch);
}
treeView1.SelectedNode = branch;
}
catch (NullReferenceException ex)
{
MessageBox.Show(ex.Message);
}
}
}