/// <include file='doc\TreeNodeCollection.uex' path='docs/doc[@for="TreeNodeCollection.Add1"]/*' /> /// <devdoc> /// Adds a new child node to this node. Child node is positioned after siblings. /// </devdoc> public virtual int Add(TreeNode node) { if (node == null) { throw new ArgumentNullException("node"); } if (node.handle != IntPtr.Zero) { throw new ArgumentException(SR.GetString(SR.OnlyOneControl, node.Text), "node"); } // If the TreeView is sorted, index is ignored TreeView tv = owner.TreeView; if (tv != null && tv.Sorted) { return(owner.AddSorted(node)); } owner.EnsureCapacity(); node.parent = owner; node.index = owner.childCount++; owner.children[node.index] = node; node.Realize(); if (tv != null && node == tv.selectedNode) { tv.SelectedNode = node; // communicate this to the handle } return(node.index); }
private int AddInternal(TreeNode node, int delta) { ArgumentNullException.ThrowIfNull(node); if (node._handle != IntPtr.Zero) { throw new ArgumentException(string.Format(SR.OnlyOneControl, node.Text), nameof(node)); } // Check for ParentingCycle owner.CheckParentingCycle(node); // If the TreeView is sorted, index is ignored TreeView tv = owner.TreeView; if (tv is not null) { foreach (TreeNode treeNode in node.GetSelfAndChildNodes()) { KeyboardToolTipStateMachine.Instance.Hook(treeNode, tv.KeyboardToolTip); } } if (tv is not null && tv.Sorted) { return(owner.AddSorted(node)); } node.parent = owner; int fixedIndex = owner.Nodes.FixedIndex; if (fixedIndex != -1) { node.index = fixedIndex + delta; } else { //if fixedIndex != -1 capacity was ensured by AddRange Debug.Assert(delta == 0, "delta should be 0"); owner.EnsureCapacity(1); node.index = owner.childCount; } owner.children[node.index] = node; owner.childCount++; node.Realize(false); if (tv is not null && node == tv.selectedNode) { tv.SelectedNode = node; // communicate this to the handle } if (tv is not null && tv.TreeViewNodeSorter is not null) { tv.Sort(); } return(node.index); }
private int AddInternal(TreeNode node, int delta) { if (node == null) { throw new ArgumentNullException(nameof(node)); } if (node.handle != IntPtr.Zero) { throw new ArgumentException(string.Format(SR.OnlyOneControl, node.Text), "node"); } // Check for ParentingCycle owner.CheckParentingCycle(node); // If the TreeView is sorted, index is ignored TreeView tv = owner.TreeView; if (tv != null && tv.Sorted) { return(owner.AddSorted(node)); } node.parent = owner; int fixedIndex = owner.Nodes.FixedIndex; if (fixedIndex != -1) { node.index = fixedIndex + delta; } else { //if fixedIndex != -1 capacity was ensured by AddRange Debug.Assert(delta == 0, "delta should be 0"); owner.EnsureCapacity(1); node.index = owner.childCount; } owner.children[node.index] = node; owner.childCount++; node.Realize(false); if (tv != null && node == tv.selectedNode) { tv.SelectedNode = node; // communicate this to the handle } if (tv != null && tv.TreeViewNodeSorter != null) { tv.Sort(); } return(node.index); }