public void RemoveChild(ITreeNode node)
{
// Ignore if the node has already been added.
if (!Contains(node)) return;
// Fire pre-event.
TreeNodeEventArgs args = new TreeNodeEventArgs(node, NullIndex);
FireRemovingChild(args);
// Remove the child.
ChildList.Remove(node);
// Unwire events.
node.SelectionChanged -= OnChildSelectionChanged;
// De-register this as the nodes parent.
if (node.Parent == this) SetParent(node, null);
// Fire post-event.
FireChildRemoved(args);
}