Index: Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs =================================================================== diff -u -r0e931e2849e1a8d8fbda67f0ec6b1b799dd39e79 -re076810b04245dd67e4ee3b54cf3af186e2bdb25 --- Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs (.../TreeViewControl.cs) (revision 0e931e2849e1a8d8fbda67f0ec6b1b799dd39e79) +++ Core/Common/src/Core.Common.Controls.TreeView/TreeViewControl.cs (.../TreeViewControl.cs) (revision e076810b04245dd67e4ee3b54cf3af186e2bdb25) @@ -422,11 +422,11 @@ private void TryRemoveChildNodes(TreeNode treeNode) { TreeNodeInfo treeNodeInfo = TryGetTreeNodeInfoForData(treeNode.Tag); - + string message = treeNodeInfo.OnRemoveChildNodesConfirmationText != null ? treeNodeInfo.OnRemoveChildNodesConfirmationText(treeNode.Tag) : Resources.TreeViewControl_Are_you_sure_you_want_to_remove_children_of_the_selected_item; - + if (MessageBox.Show(message, BaseResources.Confirm, MessageBoxButtons.OKCancel) != DialogResult.OK) { return; @@ -731,11 +731,14 @@ newlyAddedTreeNodes.Add(newTreeNode); } - private static void RemovePossiblyOutdatedChildNodesAtEnd(TreeNode parentNode, int expectedChildNodeLength) + private void RemovePossiblyOutdatedChildNodesAtEnd(TreeNode parentNode, int expectedChildNodeLength) { for (int i = parentNode.Nodes.Count - 1; i >= expectedChildNodeLength; i--) { - parentNode.Nodes.RemoveAt(i); + TreeNode nodeToRemove = parentNode.Nodes[i]; + + parentNode.Nodes.Remove(nodeToRemove); + RemoveTreeNodeFromLookupRecursively(nodeToRemove); } }