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.