Principales respuestas
Cargar Formularios con TreeView

Pregunta
-
Estimad@s:
Me encuentro desarrollando una aplicación donde el formulario principal contiene un TreeView que obtiene sus nodos dinámicamente desde un archivo XML. Mi objetivo es que a través de una propiedad denominada form (que contiene el nombre del formulario asignado) en cada nodo del XML sea capaz de llamar a cada uno de los formularios que se encuentran en el proyecto. A continuación muestro el código para explicarme mejor.
El XML con la estructura que obtendrá el TreeView:
<?xml version="1.0" encoding="utf-8"?> <MenuPrincipal> <Modulos> <Modulo id ="1" nombre ="Candidatos"> <Operacion form="C_Candidatos" tipo="Agregar">Registrar Candidato</Operacion> <Operacion form="R_Candidatos" tipo="Modificar">Modificar Candidato</Operacion> <Operacion form="U_Candidatos" tipo="Eliminar">Eliminar Candidato</Operacion> <Operacion form="D_Candidatos" tipo="Consultar">Consultar Candidato</Operacion> </Modulo> <Modulo id ="2" nombre ="Departamentos"> <Operacion form="C_Departamentos" tipo="Agregar">Registrar Departamento</Operacion> <Operacion form="R_Departamentos" tipo="Modificar">Modificar Departamento</Operacion> <Operacion form="U_Departamentos" tipo="Eliminar">Eliminar Departamento</Operacion> <Operacion form="D_Departamentos" tipo="Consultar">Consultar Departamento</Operacion> </Modulo> <Modulo id ="3" nombre ="Entrevistas"> <Operacion form="C_Entrevistas" tipo="Agregar">Registrar Entrevista</Operacion> <Operacion form="R_Entrevistas" tipo="Modificar">Modificar Entrevista</Operacion> <Operacion form="U_Entrevistas" tipo="Eliminar">Eliminar Entrevista</Operacion> <Operacion form="D_Entrevistas" tipo="Consultar">Consultar Entrevista</Operacion> </Modulo> <Modulo id ="4" nombre ="Carreras"> <Operacion form="C_Carreras" tipo="Agregar">Registrar Carrera</Operacion> <Operacion form="R_Carreras" tipo="Modificar">Modificar Carrera</Operacion> <Operacion form="U_Carreras" tipo="Eliminar">Eliminar Carrera</Operacion> <Operacion form="D_Carreras" tipo="Consultar">Consultar Carrera</Operacion> </Modulo> <Modulo id ="5" nombre ="Facultades"> <Operacion form="C_Facultades" tipo="Agregar">Registrar Facultad</Operacion> <Operacion form="R_Facultades" tipo="Modificar">Modificar Facultad</Operacion> <Operacion form="U_Facultades" tipo="Eliminar">Eliminar Facultad</Operacion> <Operacion form="D_Facultades" tipo="Consultar">Consultar Facultad</Operacion> </Modulo> <Modulo id ="6" nombre ="Tipo de Educación"> <Operacion form="C_TEducacion" tipo="Agregar">Registrar Tipo de Educación</Operacion> <Operacion form="R_TEducacion" tipo="Consultar">Consultar Tipo de Educación</Operacion> <Operacion form="U_TEducacion" tipo="Modificar">Modificar Tipo de Educación</Operacion> <Operacion form="D_TEducacion" tipo="Eliminar">Eliminar Tipo de Educación</Operacion> </Modulo> <Modulo id ="7" nombre ="Tipo de Experiencia"> <Operacion form="C_TExperiencia" tipo="Agregar">Registrar Tipo de Experiencia</Operacion> <Operacion form="R_TExperiencia" tipo="Modificar">Modificar Tipo de Experiencia</Operacion> <Operacion form="U_TExperiencia" tipo="Eliminar">Eliminar Tipo de Experiencia</Operacion> <Operacion form="D_TExperiencia" tipo="Consultar">Consultar Tipo de Experiencia</Operacion> </Modulo> <Modulo id ="8" nombre ="Usuarios"> <Operacion form="C_Usuarios" tipo="Agregar">Registrar Usuario</Operacion> <Operacion form="R_Usuarios" tipo="Modificar">Modificar Usuario</Operacion> <Operacion form="U_Usuarios" tipo="Eliminar">Eliminar Usuario</Operacion> <Operacion form="D_Usuarios" tipo="Consultar">Consultar Usuario</Operacion> </Modulo> <Modulo id ="9" nombre ="Tipos de Usuarios"> <Operacion form="C_TUsuarios" tipo="Agregar">Registrar Tipo de Usuario</Operacion> <Operacion form="R_TUsuarios" tipo="Modificar">Modificar Tipo de Usuario</Operacion> <Operacion form="U_TUsuarios" tipo="Eliminar">Eliminar Tipo de Usuario</Operacion> <Operacion form="D_TUsuarios" tipo="Consultar">Consultar Tipo de Usuario</Operacion> </Modulo> </Modulos> </MenuPrincipal>
El método que llena el TreeView con el XML:private void cargarArbol() { XElement doc = XElement.Load(@"../../MenuPrincipal.xml"); TreeNode modulos; int contador = 1; foreach (XElement modulo in doc.Descendants("Modulo")) { modulos = this.ArbolPrincipal.Nodes.Add(modulo.Attribute("nombre").Value); foreach (XElement operaciones in modulo.Descendants("Operacion")) { TreeNode elemento = new TreeNode(operaciones.Value); elemento.Name = "item" + contador; elemento.Tag = new ItemsMenu { descripcion = elemento.Text, tipo = "tipo " + contador, formulario = operaciones.Attribute("form").Value }; modulos.Nodes.Add(elemento); contador++; } } }
La clase ItemsMenu que se usa en los Tags de cada TreeNode.
class ItemsMenu { public string descripcion { get; set; } public string tipo { get; set; } public string formulario { get; set; } }
Nótese que utilizo la propiedad Tag de cada TreeNode para almacenar las propiedades de cada nodo donde se destaca el atributo formulario que es el que quiero usar para llamar a los formularios.
El evento al realizar doble-click sobre algún nodo:
private void ArbolPrincipal_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e) { ItemsMenu etiqueta = (ItemsMenu)e.Node.Tag; if (etiqueta != null) { MessageBox.Show("Formulario: " + etiqueta.formulario); //Mandar a llamar el formulario con etiqueta.formulario } }
Alli simplemente imprimí el nombre del formulario haber si los datos llegaban bien y efectivamente así es. El problema es que no se como instanciar las diferentes clases (que son los formularios) solo con el valor (string) que devuelve etiqueta.formulario (por ejemplo, "C_Usuarios")En otras palabras, lo que deseo es ahorrarme la gran cantidad de líneas de código escribiendo un SWITCH con cada atributo y dentro de cada CASE llamar a cada formulario.
Espero puedan ayudarme, saludos y muchas gracias!
martes, 12 de julio de 2011 22:48
Respuestas
-
si en el tag pones el nombre de la clase del formulario podrias aplciar algo como esto
Mostrar un formulario conocimiento su nombre
Nota: para trducirlo a c# ayudate con estas tools
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Pedro Hurtado miércoles, 13 de julio de 2011 20:44
- Marcado como respuesta yesez5 jueves, 14 de julio de 2011 20:15
martes, 12 de julio de 2011 23:40
Todas las respuestas
-
si en el tag pones el nombre de la clase del formulario podrias aplciar algo como esto
Mostrar un formulario conocimiento su nombre
Nota: para trducirlo a c# ayudate con estas tools
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Propuesto como respuesta Pedro Hurtado miércoles, 13 de julio de 2011 20:44
- Marcado como respuesta yesez5 jueves, 14 de julio de 2011 20:15
martes, 12 de julio de 2011 23:40 -
Excelente Leandro, muchas gracias por tu ayuda.
Saludos.
jueves, 14 de julio de 2011 20:16