Para desarrollar esta segunda versión, que sustituye, mejorando a "Más código en C#: Cómo montar un navegador en un TreeView", cree una clase. La llamé "SuperTreeNode" y hereda todo de la clase "TreeNode" perteneciente a System.Windows.Forms.
Código de la clase SuperTreeNode:
class SuperTreeNode:TreeNode //los dos puntos preceden a la clase superior
{
private string ruta;
public SuperTreeNode()
: base()
{
this.ruta = "";
}
public SuperTreeNode(string ruta)
: base()
{
this.ruta = ruta;
}
public SuperTreeNode(string texto, string ruta):base(texto)
{
this.ruta = ruta;
}
public string Ruta
{
get { return ruta; }
set { ruta = value; }
}
}
El código de la clase donde se realizan las funciones relativas a la carga de los directorios, en esta versión, se cargan cuando se procede a utilizarlos, resolviendo asi el problemas con la memoria RAM, que antes se veia afectada.
Código de la clase del formulario principal, donde uso System.IO;:
public partial class Form1 : Form
{
SuperTreeNode NodoRaiz;
public Form1()
{
InitializeComponent();
NodoRaiz = new SuperTreeNode();
NodoRaiz.ImageIndex = 0;
NodoRaiz.Text = "MI PC"; //doy un texto al nodo primario
TreeVArboleda.Nodes.Add(NodoRaiz); //el nodoprimario lo agrego al arbol
}
private void Form1_Load(object sender, EventArgs e)
{
Inicio();
TreeVArboleda.ExpandAll();
}
public void Inicio()
{
//lo primero, sacar las unidades.
DriveInfo[] drivers = DriveInfo.GetDrives();//se obtienen todos los drivers
foreach (DriveInfo driver in drivers)
{
try
{
//de cada driver se obtiene el nombre y el fullname y se convierte a nodo. El nodo se agrega al principal
SuperTreeNode nodo = new SuperTreeNode();
nodo.Text = driver.Name; //nombre
nodo.Ruta = driver.RootDirectory.FullName; //ruta
NodoRaiz.Nodes.Add(nodo);
StateLblInformacion.Text ="";
}
catch (Exception ex)
{
StateLblInformacion.Text = ex.Message;
}
}
}
private void TreeVArboleda_AfterSelect(object sender, TreeViewEventArgs e)
{
SuperTreeNode nodo = (SuperTreeNode)e.Node;
TxtRutaActual.Text = nodo.Ruta; //obtengo la ruta seleccionada
try
{
//obtengo el contenido (subdirectorios) del directorio de la ruta
DirectoryInfo unDirectorio = new DirectoryInfo(TxtRutaActual.Text);
DirectoryInfo[] subdirectorios = unDirectorio.GetDirectories();
nodo.Nodes.Clear();
foreach (DirectoryInfo directorios in subdirectorios)
{
try
{
//por cada subdirectorio cro un nodo llamado hijo al que anclo al nodo creado al principio
SuperTreeNode hijo = new SuperTreeNode(directorios.Name, directorios.FullName);
nodo.Nodes.Add(hijo);
StateLblInformacion.Text = "";
}
catch (Exception ex2)
{
StateLblInformacion.Text = ex2.Message;
}
}
}
catch (Exception ex)
{
StateLblInformacion.Text = ex.Message;
}
}
}
}
Saludos.
No hay comentarios:
Publicar un comentario