using System.Collections.Generic; using System.Windows.Forms; namespace PckStudio.Core.Extensions { public static class TreeNodeExtensions { public static bool IsTagOfType(this TreeNode node) where T : class { return node?.Tag is T; } public static bool TryGetTagData(this TreeNode node, out TOut tagData) where TOut : class { if (node?.Tag is TOut data) { tagData = data; return true; } tagData = default; return false; } public static bool Contains(this TreeNode thisNode, TreeNode childNode) { if (childNode.Parent == null) return false; if (thisNode.Equals(childNode.Parent)) return true; // If the parent node is not equal to the first node, // call the TreeNode.Contains recursively using the parent of the node. return thisNode.Contains(childNode.Parent); } public static List GetChildNodes(this TreeNode thisNode) { List nodes = new List(thisNode.Nodes.Count); foreach (TreeNode node in thisNode.Nodes) { nodes.Add(node); nodes.AddRange(node.GetChildNodes()); } return nodes; } } }