Esto es una continuación Post anteriores (Llenar TreeView desde un XML Parte 1 y Llenar TreeView desde un XML Parte 2).
De las forma en que está hora se pueden implentar los eventos lanzado una sola vez y tendrán influencia en todos los componentes TreeView que se encuentren en el formulario. Sin embargo he incluido eventos que permiten identificar desde que TreeView fueron ejecutados para poder distinguir uno del otro en la implementación de los eventos. Todavía me encuentro trabajando en el pequeño proyecto en el cual uso esta implementación, es por eso que es posible que en un futuro pienso hacerle algunos cambios, pero en cualquier de los casos yo lo iré actualizando en el Blog. De las cosas que quiero hacer en cuanto tenga un tiempo es que también se representen en el TreeView los atributos de los nodos del XML seleccionado. Esta implentación se puede incluir en cualquier implementación o en una DLL aparte, es como yo la estoy utilizando, de ahí que tenga que incluir una referencia a System.Windows.Forms (using System.Windows.Forms;). También está presente el uso de LINQ que para mi es lo mejor que tiene el nuevo Framework.Net. A continuación un ejemplo de cómo usar esto:
XDocument docXml = XDocument.Load(@"prueba.xml");
treeView1.SourceXml(docXml.Root);
Previamente debe tener definido un TreeView llamado treeView1 y tener incluida la referencia a System.Xml.Linq (using System.Xml.Linq;). Como anteriormente explicaba pues es posible manipular las imágenes que deseamos ponerle al TreeView implementando los eventos para esto, ejemplo:
TreeViewXML.changeImageFromElementsNodesOf += new ChangeImageFromElementsNodesOf(TreeViewXML_changeImageFromElementsNodesOf);
TreeViewXML.changeImageFromTextNodesOf += new ChangeImageFromTextNodesOf(TreeViewXML_changeImageFromTextNodesOf);
void TreeViewXML_changeImageFromTextNodesOf(TreeView currentTreeView, TreeNode currentTreeNode)
{
if (currentTreeView.Name == this.tvData.Name)
{
currentTreeNode.Nodes[currentTreeNode.Nodes.Count - 1].ImageIndex = 2;
currentTreeNode.Nodes[currentTreeNode.Nodes.Count - 1].SelectedImageIndex = 2;
}
}
void TreeViewXML_changeImageFromElementsNodesOf(TreeView currentTreeView, TreeNode currentTreeNode)
{
if (currentTreeView.Name == this.tvData.Name)
{
currentTreeNode.Nodes[currentTreeNode.Nodes.Count - 1].ImageIndex = 1;
currentTreeNode.Nodes[currentTreeNode.Nodes.Count - 1].SelectedImageIndex = 1;
}
}
También es posible determinar a que nodo del arbol principal corresponde cualquier TreeNode del TreeView seleccionado. A continuación un ejemplo en caso de querer implementar el evento AfterSelect que está presente en el TreeView.
private void tvData_AfterSelect(object sender, TreeViewEventArgs e)
{
int SelectedRootPos = e.Node.SelectRootNodePos();
}
De esta forma la variable SelectedRootPos guardará la posicíón del TreeNode correspondiente al nodo seleccionado en el árbol principal de nodos del TreeView.
Con esto finalizo esta serie de artículos, espero que les sirva, cualquier mejora que le hagan para mi sería genial.
0 comentarios:
Publicar un comentario en la entrada