#region Usings using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Windows.Forms; #endregion #region Tree Node Helper public static class TreeNodeHelper { public static void ListDirectory(TreeView treeView, string path, string[] filter) { treeView.Nodes.Clear(); var rootDirectoryInfo = new DirectoryInfo(path); treeView.Nodes.Add(CreateDirectoryNode(rootDirectoryInfo, filter)); } public static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo, string[] filter) { var directoryNode = new TreeNode(directoryInfo.Name); foreach (var directory in directoryInfo.GetDirectories()) directoryNode.Nodes.Add(CreateDirectoryNode(directory, filter)); foreach (var file in directoryInfo.GetFilesByExtensions(filter)) directoryNode.Nodes.Add(new TreeNode(file.Name)); return directoryNode; } //https://stackoverflow.com/questions/42295131/searching-a-treeview-for-a-specific-string public static TreeNode SearchTreeView(string p_sSearchTerm, TreeNodeCollection p_Nodes) { foreach (TreeNode node in p_Nodes) { if (node.Text == p_sSearchTerm) return node; if (node.Nodes.Count > 0) { TreeNode child = SearchTreeView(p_sSearchTerm, node.Nodes); if (child != null) { return child; } } } return null; } public static string GetFolderNameFromPrefix(string source, string seperator = " -") { try { string result = source.Substring(0, source.IndexOf(seperator)); if (Directory.Exists(GlobalPaths.MapsDir + @"\\" + result)) { return result + @"\\"; } else { return ""; } } catch (Exception) { return ""; } } public static void CopyNodes(TreeNodeCollection oldcollection, TreeNodeCollection newcollection) { foreach (TreeNode node in oldcollection) { newcollection.Add((TreeNode)node.Clone()); } } public static List GetAllNodes(this TreeView _self) { List result = new List(); foreach (TreeNode child in _self.Nodes) { result.AddRange(child.GetAllNodes()); } return result; } public static List GetAllNodes(this TreeNode _self) { List result = new List(); result.Add(_self); foreach (TreeNode child in _self.Nodes) { result.AddRange(child.GetAllNodes()); } return result; } public static List Ancestors(this TreeNode node) { return AncestorsInternal(node).Reverse().ToList(); } public static List AncestorsAndSelf(this TreeNode node) { return AncestorsInternal(node, true).Reverse().ToList(); } private static IEnumerable AncestorsInternal(TreeNode node, bool self = false) { if (self) yield return node; while (node.Parent != null) { node = node.Parent; yield return node; } } } #endregion