InicioInfoTreeView Recursivo

TreeView Recursivo

Info6/25/2015
1 formulario con treeview, id, nombre genero, dos clases Persona y la derivada del formulario

******Clase Pincipal Persona***************
class Persona
{
private int id;
private String nombre;
private String genero;
private List<Persona> personas;

encapsular todo

public Persona()
{
this.id = 0;
this.nombre = "";
this.personas = new List<Persona>();
}
public Persona(int initialId, String initialNombre)
{
this.id = initialId;
this.nombre = initialNombre;
this.personas = new List<Persona>();
}
public Persona(int initialId, String initialNombre ,String initialGenero,List<Persona> initialPersona)
{
this.id = initialId;
this.nombre = initialNombre;
this.genero=initialGenero;
this.personas = initialPersona;
}
public override string ToString()
{
return id + " - " + nombre;
}
}

******form1 principal***************
public partial class Form1 : Form
{
private Persona listaPersonas;

internal Persona ListaPersonas
{
get { return listaPersonas; }
set { listaPersonas = value; }
}

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
setEstado("INI";
this.listaPersonas = new Persona();
this.listaPersonas.Id = 1;
this.listaPersonas.Nombre = "Personas";
this.listaPersonas.Genero = "";
llenarArbol();
}
private void llenarArbol()
{
treePersonas.Nodes.Clear();
TreeNode nodo = new TreeNode();
nodo.Text = this.listaPersonas.Nombre;
nodo.Tag = this.listaPersonas;
treePersonas.Nodes.Add(nodo);
imprimirRamas(this.listaPersonas.Personas,treePersonas.Nodes[0]); //lista de nodos derivados de nodo padre, nodo padre
}

private void imprimirRamas(List<Persona> personas, TreeNode nodoPadre)
{
int i = 0;
foreach (Persona persona in personas) //nodo de la lista
{
TreeNode nodoHijo = new TreeNode();
nodoHijo.Text = persona.Nombre;
nodoHijo.Tag = persona;
nodoPadre.Nodes.Add(nodoHijo);

if (persona.Personas.Count > 0)
{
imprimirRamas(persona.Personas, nodoPadre.Nodes);
}
i++;
}
}

private void imprimirRamas(List<Persona> personas)
{
foreach (Persona persona in personas)
{
System.Console.WriteLine(persona.Id + " - " + persona.Nombre);
if (persona.Personas.Count > 0)
{
imprimirRamas(persona.Personas);
}
}
}
private void buscarPadre(List<Persona> personas, Persona personaPadre, Persona personaHijo)
{
foreach (Persona persona in personas)
{ //interes=objeto de la primera lista
if (persona.Id == personaPadre.Id)
{
persona.Personas.Add(personaHijo);
break;
}
if (persona.Personas.Count > 0)
{
buscarPadre(persona.Personas, personaPadre, personaHijo);
}
}
}

private void btnActualizar_Click(object sender, EventArgs e)
{
Persona persona = new Persona();
persona.Id = Convert.ToInt16(txtId.Text);
persona.Nombre = txtNombre.Text;
persona.Genero = cmbGenero.SelectedItem.ToString();

Persona personaPadre = (Persona)treePersonas.SelectedNode.Tag;
if (this.listaPersonas.Id == personaPadre.Id)
listaPersonas.Nombre = personaPadre.Nombre;
else
actualizaLista(listaPersonas.Personas, personaPadre, persona);//LISTA DEL NODO RAIZ,NODO SELECCIONADO, NODO INGRESADO
llenarArbol();
setEstado("INI";
}

private void actualizaLista(List<Persona> personas, Persona personaPadre,Persona personaHijo)
{
foreach (Persona persona in personas)
{ //interes=objeto de la primera lista
if (persona.Id == personaPadre.Id)
{
persona.Nombre = personaHijo.Nombre;

break;
}
if (persona.Personas.Count > 0)
{
actualizaLista(persona.Personas, personaPadre, personaHijo);
}
}

}

private void btnEliminar_Click(object sender, EventArgs e)
{
Persona personaPadre = (Persona)treePersonas.SelectedNode.Tag;
if (personaPadre.Id != 1)
{
if (this.listaPersonas.Id == personaPadre.Id)
{
listaPersonas.Nombre = "";
listaPersonas.Personas.Clear();
}
else
borrarLista(listaPersonas.Personas, personaPadre);//LISTA DEL NODO RAIZ,NODO SELECCIONADO, NODO INGRESADO
llenarArbol();
setEstado("INI";
}
else
{
MessageBox.Show("No se puede eliminar nodo raiz";
}
}

private void borrarLista(List<Persona> personas, Persona personaPadre)
{
for (int i = personas.Count - 1; i >= 0; i--)
//foreach (Interes interes in intereses)
{ //interes=objeto de la primera lista
if (personas.Id == personaPadre.Id)
{
personas.Remove(personas);


break;
}
if (personas.Personas.Count > 0)
{
borrarLista(personas.Personas, personaPadre);
}
}
}

private void btnNuevo_Click(object sender, EventArgs e)
{
setEstado("INS";
}

private void btnGuardar_Click(object sender, EventArgs e)
{

Persona persona = new Persona();
persona.Id = identificador();//Convert.ToInt16(txtId.Text);
persona.Nombre = txtNombre.Text;
persona.Genero = cmbGenero.SelectedItem.ToString();

/*
TreeNode nuevoNodo = new TreeNode();
nuevoNodo.Text = interes.Nombre;
nuevoNodo.Tag = interes;
treeInteres.SelectedNode.Nodes.Add(nuevoNodo);
*/
try
{
Persona personaPadre = (Persona)treePersonas.SelectedNode.Tag;
if (this.listaPersonas.Id == personaPadre.Id)
listaPersonas.Personas.Add(persona);
else
buscarPadre(listaPersonas.Personas, personaPadre, persona);//LISTA DEL NODO RAIZ,NODO SELECCIONADO, NODO INGRESADO
llenarArbol();
}
catch
{
MessageBox.Show("Seleccionar Nodo padre";
}


}

private int identificador()
{
int i = listaPersonas.Personas.Count() + 2;
return i;
}

private void setEstado(String modo)
{
if (modo == "INI"
{
txtId.Enabled = false;
treePersonas.Enabled = true;
txtNombre.Enabled = false;
cmbGenero.Enabled = false;
btnActualizar.Enabled = false;
btnEliminar.Enabled = false;
btnNuevo.Enabled = true;
btnGuardar.Enabled = false;
}
if (modo == "INS"
{
txtId.Enabled = false;
treePersonas.Enabled = true;
txtNombre.Enabled = true;
cmbGenero.Enabled = true;
btnActualizar.Enabled = false;
btnEliminar.Enabled = false;
btnNuevo.Enabled = false;
btnGuardar.Enabled = true;
}
if (modo == "UPD"
{
txtId.Enabled = false;
treePersonas.Enabled = true;
txtNombre.Enabled = true;
cmbGenero.Enabled = true;
btnActualizar.Enabled = true;
btnEliminar.Enabled = true;
btnNuevo.Enabled = true;
btnGuardar.Enabled = false;
}

}

private void treePersonas_AfterSelect(object sender, TreeViewEventArgs e)
{
Persona personas = new Persona();
personas = (Persona)treePersonas.SelectedNode.Tag;
txtId.Text = personas.Id.ToString();
txtNombre.Text = personas.Nombre;
cmbGenero.Text = personas.Genero;
setEstado("UPD";
}
}
Datos archivados del Taringa! original
0puntos
21visitas
0comentarios
Actividad nueva en Posteamelo
0puntos
3visitas
0comentarios
Dar puntos:

Dejá tu comentario

0/2000

Autor del Post

k
kevtho🇦🇷
Usuario
Puntos0
Posts1
Ver perfil →
PosteameloArchivo Histórico de Taringa! (2004-2017). Preservando la inteligencia colectiva de la internet hispanohablante.

CONTACTO

18 de Septiembre 455, Casilla 52

Chillán, Región de Ñuble, Chile

Solo correo postal

© 2026 Posteamelo.com. No afiliado con Taringa! ni sus sucesores.

Contenido preservado con fines históricos y culturales.