internal static TreeNode AddChildNode(TreeNode parentNode, string name, FetchXmlBuilder fxb, TreeNode sisterNode = null) { var childNode = new TreeNode(name); childNode.Tag = new Dictionary <string, string>(); childNode.Name = childNode.Text.Replace(" ", ""); if (name == "#comment") { childNode.ForeColor = System.Drawing.Color.Gray; } if (parentNode != null) { if (sisterNode != null) { parentNode.Nodes.Insert(sisterNode.Index + 1, childNode); } else { var parentCap = new FetchNodeCapabilities(parentNode.Name, true); var nodeIndex = parentCap.IndexOfChild(name); var pos = 0; while (pos < parentNode.Nodes.Count && nodeIndex >= parentCap.IndexOfChild(parentNode.Nodes[pos].Name)) { pos++; } if (pos == parentNode.Nodes.Count) { parentNode.Nodes.Add(childNode); } else { parentNode.Nodes.Insert(pos, childNode); } } } Validate(childNode, fxb); return(childNode); }