Mega Code Archive

 
Categories / C# / GUI Windows Form
 

Subclass TreeView

using System; using System.Drawing; using System.IO; using System.Windows.Forms;     class DirectoryTreeView: TreeView {      public DirectoryTreeView()      {           ImageList = new ImageList();           ImageList.Images.Add(new Bitmap(GetType(), "FLOPPY.BMP"));           ImageList.Images.Add(new Bitmap(GetType(), "FOLD.BMP"));           ImageList.Images.Add(new Bitmap(GetType(), "OPENFOLD.BMP"));           RefreshTree();      }      public void RefreshTree()      {           BeginUpdate();           Nodes.Clear();           string[] astrDrives = Directory.GetLogicalDrives();               foreach (string str in astrDrives)           {                TreeNode tnDrive = new TreeNode(str, 0, 0);                Nodes.Add(tnDrive);                AddDirectories(tnDrive);                    if (str == "C:\\")                     SelectedNode = tnDrive;           }           EndUpdate();      }      void AddDirectories(TreeNode tn)      {           tn.Nodes.Clear();               string          strPath = tn.FullPath;           DirectoryInfo   dirinfo = new DirectoryInfo(strPath);           DirectoryInfo[] adirinfo;               adirinfo = dirinfo.GetDirectories();               foreach (DirectoryInfo di in adirinfo)           {                TreeNode tnDir = new TreeNode(di.Name, 1, 2);                tn.Nodes.Add(tnDir);           }      }      protected override void OnBeforeExpand(TreeViewCancelEventArgs tvcea)      {           base.OnBeforeExpand(tvcea);               BeginUpdate();               foreach (TreeNode tn in tvcea.Node.Nodes)                AddDirectories(tn);               EndUpdate();      } } class DirectoriesAndFiles: Form {      DirectoryTreeView dirtree;      Panel             panel;      TreeNode          tnSelect;          public static void Main()      {           Application.Run(new DirectoriesAndFiles());      }      public DirectoriesAndFiles()      {           Text = "Directories and Files";           BackColor = SystemColors.Window;           ForeColor = SystemColors.WindowText;               panel = new Panel();           panel.Parent = this;           panel.Dock = DockStyle.Fill;           panel.Paint += new PaintEventHandler(PanelOnPaint);               Splitter split = new Splitter();           split.Parent = this;           split.Dock = DockStyle.Left;           split.BackColor = SystemColors.Control;               dirtree = new DirectoryTreeView();           dirtree.Parent = this;           dirtree.Dock = DockStyle.Left;           dirtree.AfterSelect += new TreeViewEventHandler(DirectoryTreeViewOnAfterSelect);               Menu = new MainMenu();           Menu.MenuItems.Add("View");               MenuItem mi = new MenuItem("Refresh", new EventHandler(MenuOnRefresh), Shortcut.F5);           Menu.MenuItems[0].MenuItems.Add(mi);      }      void DirectoryTreeViewOnAfterSelect(object obj, TreeViewEventArgs tvea)      {           tnSelect = tvea.Node;           panel.Invalidate();      }      void PanelOnPaint(object obj, PaintEventArgs pea)      {           if (tnSelect == null)                return;               Panel         panel     = (Panel) obj;           Graphics      grfx      = pea.Graphics;           DirectoryInfo dirinfo   = new DirectoryInfo(tnSelect.FullPath);           FileInfo[]    afileinfo;           Brush         brush     = new SolidBrush(panel.ForeColor);           int           y         = 0;               afileinfo = dirinfo.GetFiles();           foreach (FileInfo fileinfo in afileinfo)           {                grfx.DrawString(fileinfo.Name, Font, brush, 0, y);                y += Font.Height;           }      }      void MenuOnRefresh(object obj, EventArgs ea)      {           dirtree.RefreshTree();      } }