public void Remove(System.ComponentModel.IComponent component)
{
//safety checks
if (component == null)
throw new ArgumentNullException ("component");
if (component.Site == null || component.Site.Container != this)
throw new ArgumentException ("Component is not sited in this container");
//broadcast start of removal process
OnComponentRemoving (component);
//clean up component and designer
components.Remove (component);
IDesigner designer = GetDesigner (component);
if (designer != null)
{
designers.Remove (component);
designer.Dispose ();
}
component.Site = null;
//if someone tries to kill root component, must destroy all children too
if (component == host.RootComponent)
{
//clean everything up
foreach (System.Web.UI.Control control in Components)
host.DestroyComponent (control);
host.SetRootComponent (null);
host.Reset ();
}
//TODO: remove references from referenceManager
//clean up selection service
ISelectionService sel = (ISelectionService) this.GetService (typeof (ISelectionService));
if (sel != null && sel.GetComponentSelected (component))
sel.SetSelectedComponents (new IComponent[] {});
//broadcast completion of removal process
OnComponentRemoved (component);
}