Mega Code Archive

 
Categories / C# / File Stream
 

Directory Tree Host

/* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457 */ using System.IO; using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; namespace DirectoryTreeHost {     /// <summary>     /// Summary description for DirectoryTreeHost.     /// </summary>     public class DirectoryTreeHost : System.Windows.Forms.Form     {         /// <summary>         /// Required designer variable.         /// </summary>         private System.ComponentModel.Container components = null;         public DirectoryTreeHost()         {             //             // Required for Windows Form Designer support             //             InitializeComponent();             //             // TODO: Add any constructor code after InitializeComponent call             //         }         /// <summary>         /// Clean up any resources being used.         /// </summary>         protected override void Dispose( bool disposing )         {             if( disposing )             {                 if(components != null)                 {                     components.Dispose();                 }             }             base.Dispose( disposing );         }         #region Windows Form Designer generated code         /// <summary>         /// Required method for Designer support - do not modify         /// the contents of this method with the code editor.         /// </summary>         private void InitializeComponent()         {             //              // DirectoryTreeHost             //              this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);             this.ClientSize = new System.Drawing.Size(292, 266);             this.Name = "DirectoryTreeHost";             this.Text = "DirectoryTreeHost";             this.Load += new System.EventHandler(this.DirectoryTreeHost_Load);         }         #endregion         private void DirectoryTreeHost_Load(object sender, System.EventArgs e)         {             DirectoryTree dirTree = new                  DirectoryTree();             dirTree.Size = new Size(this.Width - 30, this.Height - 60);             dirTree.Location = new Point(5, 5);             dirTree.Drive = Char.Parse("C");             this.Controls.Add(dirTree);         }         public static void Main()         {             Application.Run(new DirectoryTreeHost());         }     }     public class DirectoryTree : TreeView     {         public delegate void DirectorySelectedDelegate(object sender,             DirectorySelectedEventArgs e);         public event DirectorySelectedDelegate DirectorySelected;                  private Char drive;         public Char Drive         {             get             {                 return drive;             }             set             {                 drive = value;                 RefreshDisplay();             }         }                  // This is public so a Refresh can be triggered manually.         public void RefreshDisplay()         {             // Erase the existing tree.             this.Nodes.Clear();                          // Set the first node.             TreeNode rootNode = new TreeNode(drive + ":\\");             this.Nodes.Add(rootNode);                          // Fill the first level and expand it.             Fill(rootNode);             this.Nodes[0].Expand();         }                  private void Fill(TreeNode dirNode)         {             DirectoryInfo dir = new DirectoryInfo(dirNode.FullPath);                          // An exception could be thrown in this code if you don't             // have sufficient security permissions for a file or directory.             // You can catch and then ignore this exception.                          foreach (DirectoryInfo dirItem in dir.GetDirectories())             {                 // Add node for the directory.                 TreeNode newNode = new TreeNode(dirItem.Name);                 dirNode.Nodes.Add(newNode);                 newNode.Nodes.Add("*");             }         }                  protected override void OnBeforeExpand(TreeViewCancelEventArgs e)         {             base.OnBeforeExpand(e);             // If a dummy node is found, remove it and read the real directory list.             if (e.Node.Nodes[0].Text == "*")             {                 e.Node.Nodes.Clear();                 Fill(e.Node);             }         }                  protected override void OnAfterSelect(TreeViewEventArgs e)         {             base.OnAfterSelect(e);                          // Raise the DirectorySelected event.             if (DirectorySelected != null)             {                 DirectorySelected(this,                     new DirectorySelectedEventArgs(e.Node.FullPath));             }         }     }     public class DirectorySelectedEventArgs : EventArgs     {         public string DirectoryName;         public DirectorySelectedEventArgs(string directoryName)         {             this.DirectoryName = directoryName;         }     } }