private ActiveXContainer CreateActiveXContainer()
 {
     if (this.activeXContainer == null)
     {
         this.activeXContainer = new ActiveXContainer(this);
     }
     return(this.activeXContainer);
 }
 private ActiveXContainer GetParentContainer()
 {
     if (this.container == null)
     {
         this.container = ActiveXContainer.FindContainerForControl(this);
     }
     if (this.container == null)
     {
         this.container = this.CreateActiveXContainer();
         this.container.AddControl(this);
     }
     return(this.container);
 }
 internal static ActiveXContainer FindContainerForControl(ActiveXBase <TActiveXClass, TActiveXInterface> control)
 {
     if (control != null)
     {
         if (control.container != null)
         {
             return(control.container);
         }
         if (control.ContainingControl != null)
         {
             ActiveXContainer container = control.CreateActiveXContainer();
             if (container.RegisterControl(control))
             {
                 container.AddControl(control);
                 return(container);
             }
         }
     }
     return(null);
 }
        private void ChangeActiveXStateDownTo(ActiveXHelper.ActiveXState state)
        {
            if (!this.GetActiveXHostState(ActiveXHelper.InTransition))
            {
                this.SetActiveXHostState(ActiveXHelper.InTransition, true);
                try
                {
                    while (state < this.activeXState)
                    {
                        switch (this.activeXState)
                        {
                        case ActiveXHelper.ActiveXState.Loaded:
                            this.numberOfComponentChangeEvents++;
                            try
                            {
                                if (this.activeXInstance != null)
                                {
                                    this.DetachInterfacesInternal();
                                    Marshal.FinalReleaseComObject(this.activeXInstance);
                                    this.activeXInstance = null;
                                }
                            }
                            finally
                            {
                                this.numberOfComponentChangeEvents--;
                            }
                            this.activeXState = ActiveXHelper.ActiveXState.Passive;
                            continue;

                        case ActiveXHelper.ActiveXState.Running:
                            this.StopEvents();
                            ActiveXContainer activeXContainer = this.GetParentContainer();
                            if (activeXContainer != null)
                            {
                                activeXContainer.RemoveControl(this);
                            }
                            this.activeXOleObject.SetClientSite(null);
                            this.activeXState = ActiveXHelper.ActiveXState.Loaded;
                            continue;

                        case (ActiveXHelper.ActiveXState.Running | ActiveXHelper.ActiveXState.Loaded):
                            break;

                        case ActiveXHelper.ActiveXState.InPlaceActive:
                            ContainerControl containingControl = this.ContainingControl;
                            if ((containingControl != null) && (containingControl.ActiveControl == this))
                            {
                                ContainerControlShim.SetActiveControlInternal(containingControl, null);
                            }
                            this.activeXOleInPlaceObject.InPlaceDeactivate();
                            this.activeXState = ActiveXHelper.ActiveXState.Running;
                            continue;

                        case ActiveXHelper.ActiveXState.UIActive:
                            this.activeXOleInPlaceObject.UIDeactivate();
                            this.activeXState = ActiveXHelper.ActiveXState.InPlaceActive;
                            continue;
                        }
                        this.activeXState -= ActiveXHelper.ActiveXState.Loaded;
                    }
                }
                finally
                {
                    this.SetActiveXHostState(ActiveXHelper.InTransition, false);
                }
            }
        }