Agregar nodos a un control TreeView (Visual C#)
Este ejemplo agrega tres nodos de primer nivel a un control TreeView existente.
Ejemplo
treeView1.Nodes.Add("First Node");
treeView1.Nodes.Add("Second Node");
treeView1.Nodes.Add("Third Node");
Control TreeView de Windows Forms
Control de eventos de Windows Forms
Descripcin de la tcnica
El control TreeView ofrece tres eventos de arrastrar y colocar que debe controlar:
ItemDrag: Este evento se genera desde el control TreeView de origen en cuanto el
usuario empieza a arrastrar el nodo de rbol. Cuando esto ocurra, llame al
mtodo DoDragDrop para iniciar el procedimiento de arrastrar y colocar.
DragEnter: despus de iniciar la operacin de arrastrar y colocar, debe controlar el
evento DragEnter del controlTreeView de destino. Este evento se produce cuando
el usuario arrastra el objeto TreeNode desde el control TreeViewde origen hasta un
punto dentro de los lmites del control TreeView de destino. El
evento DragEnter permite que el control TreeView de destino especifique si la
operacin de arrastre es vlida para este control. El cdigo de ejemplo de este
artculo slo permite la operacin de desplazamiento.
DragDrop: el ltimo evento que hay que controlar es el evento DragDrop del
control TreeView de destino. Este evento se produce cuando el
objeto TreeNode que se arrastra se ha colocado en el control TreeView de destino.
Para controlar este evento, recupere el objeto TreeNode y agrguelo al
control TreeView de destino. En el cdigo de ejemplo se utiliza el objeto Data para
recuperar los datos.
El cdigo de ejemplo de este artculo garantiza que se ha arrastrado un
objeto TreeNode hasta el control TreeView de destino. El mtodo GetData del
objeto Data recupera el nodo que se arrastra desde el control de origen. El
mtodo GetNodeAtdetermina en qu punto del control de destino se coloca este nodo.
Una vez que determine la posicin, agregue el nodo de origen como secundario del nodo
de destino. Puesto que este ejemplo realiza una operacin de desplazamiento, el ltimo
paso consiste en quitar el nodo de origen del control TreeView original.
Pasos para crear el ejemplo
1. Cree una nueva aplicacin para Windows en Visual C#. De forma predeterminada, se
crea un formulario denominado Form1.
Nota
Se debe cambiar el cdigo en Visual Studio 2005. Cuando crea un proyecto de
Windows Forms, Visual C# agrega un formulario al proyecto de manera
predeterminada y le asigna el nombre Form1. Los dos archivos que representan el
formulario se denominan Form1.cs y Form1.designer.cs. Debe escribir el cdigo en
Form1.cs; el archivo designer.cs es donde el Diseador de Windows Forms escribe el
cdigo que implementa todas las acciones que realiz arrastrando y colocando
controles desde el cuadro de herramientas.
2. Utilice el cuadro de herramientas para agregar dos controles TreeView a Form1. De
forma predeterminada se creanTreeView1 y TreeView2.
3. Para permitir que los controles TreeView se puedan arrastrar y colocar, cambie la
propiedad AllowDrop de TreeView1 yTreeView2 a True en la ventana
Propiedades.
4. Haga doble clic en Form1 para generar el controlador de mtodos del evento Load
de Form1. Agregue el cdigo siguiente para llenar los dos controles TreeView con
objetos TreeNode y para definir los controladores de eventos:
5. private void Form1_Load(object sender, System.EventArgs e)
6.
{
7.
TreeNode ParentNode1;
8.
TreeNode ParentNode2;
9.
10.
ParentNode1 = treeView1.Nodes.Add("tv1");
11.
ParentNode1.Nodes.Add("tv1FirstChild");
12.
ParentNode1.Nodes.Add("tv1SecondChild");
13.
ParentNode1.Nodes.Add("tv1ThirdChild");
14.
ParentNode1.Nodes.Add("tv1FourthChild");
15.
ParentNode1.Expand();
16.
17.
ParentNode2 = treeView2.Nodes.Add("tv2");
18.
ParentNode2.Nodes.Add("tv2FirstChild");
19.
ParentNode2.Nodes.Add("tv2SecondChild");
20.
ParentNode2.Expand();
21.
this.treeView1.ItemDrag += new
System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
22.
this.treeView2.ItemDrag += new
System.Windows.Forms.ItemDragEventHandler(this.treeView_ItemDrag);
23.
this.treeView1.DragEnter += new
System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
24.
this.treeView2.DragEnter += new
System.Windows.Forms.DragEventHandler(this.treeView_DragEnter);
25.
this.treeView1.DragDrop += new
System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);
26.
this.treeView2.DragDrop += new
System.Windows.Forms.DragEventHandler(this.treeView_DragDrop);
}
27. Agregue el controlador de mtodos siguiente para controlar el
evento ItemDrag de TreeView1 o TreeView2, dependiendo de la direccin de la
operacin de arrastre. Este cdigo inicia una operacin de desplazamiento del
elemento que se est arrastrando.
28. private void treeView_ItemDrag(object sender,
29.
System.Windows.Forms.ItemDragEventArgs e)
30.
{
31.
DoDragDrop(e.Item, DragDropEffects.Move);
}
32. Agregue el controlador de mtodos siguiente para controlar el
evento DragEnter de TreeView1 o TreeView2, dependiendo de la direccin de la
operacin de arrastre:
33. private void treeView_DragEnter(object sender,
34.
System.Windows.Forms.DragEventArgs e)
35.
{
36.
e.Effect = DragDropEffects.Move;
}
37. Agregue el mtodo siguiente a la clase Form1 de forma que siga inmediatamente al
mtodo que agreg en el paso anterior:
38. private void treeView_DragDrop(object sender,
System.Windows.Forms.DragEventArgs e)
39.
{
40.
TreeNode NewNode;
41.
42.
if(e.Data.GetDataPresent("System.Windows.Forms.TreeNode", false))
43.
{
44. Point pt = ((TreeView)sender).PointToClient(new Point(e.X, e.Y));
45.
TreeNode DestinationNode =
((TreeView)sender).GetNodeAt(pt);
46.
NewNode =
(TreeNode)e.Data.GetData("System.Windows.Forms.TreeNode");
47.
if(DestinationNode.TreeView != NewNode.TreeView)
{
48.
DestinationNode.Nodes.Add((TreeNode) NewNode.Clone());
49.
DestinationNode.Expand();
50.
//Remove Original Node
51.
NewNode.Remove();
52.
}
53.
}
}
54. Genere y ejecute el proyecto. Arrastre nodos desde un control TreeView hasta el
otro. Observe que se quita el nodo del control de origen y se agrega como nodo
secundario al control de destino.
Notas
El ejemplo que se ofrece en este artculo est pensado con fines demostrativos
nicamente. Por tanto, solo ilustra cmo utilizar el control TreeView en un escenario
simplificado. Para reducir el tamao del ejemplo, no se tienen en cuenta varios escenarios.
Por ejemplo, el cdigo no le permite realizar una operacin de arrastrar y colocar con
nodos del mismo control TreeView.
El cdigo tampoco trata el escenario en el que un usuario no coloca el objeto en un nodo
concreto del control TreeView de destino. Para controlar este escenario, compruebe
si DestinationNode es nulo; si lo es, puede agregar el objeto que se est arrastrando
hasta la raz del control TreeView y as sucesivamente.