public TreeForm() { InitializeComponent(); tree.ShowNodeToolTips = true; tabControl.ShowToolTips = true; tabControl.Controls.Clear (); // using System.IO; DriveInfo[] disks = DriveInfo.GetDrives(); foreach (var disk in disks) { // var d = new DirectoryInfo("../../../.."); // this.Text = d.FullName; DirectoryInfo d = disk.RootDirectory; MyNode branch = new MyNode(); branch.Text = d.Name; branch.ToolTipText = d.FullName; branch.ForeColor = Color.Orange; branch.path = d.FullName; branch.directory = true; tree.Nodes.Add(branch); displayDir(branch, d); // branch.ExpandAll (); // branch.Expand(); } } private void displayDir(MyNode target, DirectoryInfo dir, int level = 1) { try { DirectoryInfo[] items = dir.GetDirectories(); foreach (var item in items) { MyNode node = new MyNode(); node.Text = item.Name; node.ToolTipText = item.FullName; node.ForeColor = Color.Lime; node.path = item.FullName; node.directory = true; target.Nodes.Add(node); if (level > 1) displayDir(node, item, level - 1); } FileInfo[] file_items = dir.GetFiles(); foreach (var item in file_items) { MyNode node = new MyNode(); node.Text = item.Name; node.ToolTipText = item.FullName; node.ForeColor = Color.Blue; node.path = item.FullName; target.Nodes.Add(node); } target.complete = true; } catch (Exception ex) { TreeNode node = new TreeNode(); node.Text = ex.Message; node.ToolTipText = ex.StackTrace; node.ForeColor = Color.Red; target.Nodes.Add(node); } } private void tree_BeforeExpand(object sender, TreeViewCancelEventArgs e) { TreeNode branch = e.Node; foreach (TreeNode tree_item in branch.Nodes) { if (tree_item is MyNode) { MyNode item = tree_item as MyNode; if (item.directory && !item.complete) displayDir(item, new DirectoryInfo(item.path)); } } } private void tree_DoubleClick (object sender, EventArgs e) { // tabControl.ShowToolTips = true; // tabControl.Controls.Clear (); TreeNode tree_node = tree.SelectedNode; if (tree_node is MyNode node) { // MyNode node = tree_node as MyNode; if (!node.directory) { var fi = new FileInfo (node.path); TabPage page = new TabPage(); page.Text = fi.Name; page.ToolTipText = fi.FullName; tabControl.Controls.Add(page); string ext = fi.Extension; switch (ext) { case ".txt": case ".h": case ".c": case ".cpp": case ".pas": TextBox edit = new TextBox(); edit.Multiline = true; edit.Dock = DockStyle.Fill; edit.Text = File.ReadAllText (node.path); page.Controls.Add (edit); break; case ".png": case ".bmp": case ".jpg": case ".jpeg": Panel picture = new Panel(); picture.BackgroundImage = new Bitmap(node.path); picture.BackgroundImageLayout = ImageLayout.Stretch; picture.Dock = DockStyle.Fill; page.Controls.Add(picture); break; } } } [[http://kmlinux.fjfi.cvut.cz/~culikzde/pw/2021/Tree2021.zip|zip]]