public void DockControl(int panelIndex, int index, DockingType direction) { if (direction == DockingType.Floating) { throw new ArgumentException("Can't dock to a docking type of floating"); } else { bool autoHide = this.AutoHide; bool cancelled = this.Cancelled; if (this.AutoHide) { this.AutoHide = false; } this.Cancelled = false; DockControlContainerCollection panels = DockControlContainerCollectionHelpers.GetCollection(_manager, direction); DockControlContainer container = panels[panelIndex] as DockControlContainer; container.DockControl(this, container.DockedControlList.Count, index); RemoveFloatingForm(); this.AutoHide = autoHide; this.Cancelled = cancelled; } }
private void DockControl(Point dropPoint, DockControlContainer container, int dimension) { Point containerLocalDropPoint = container.PointToClient(PointToScreen(dropPoint)); int index = 0; DockedControlCollection controls = container.DockedControls as DockedControlCollection; foreach (DockingControl child in controls) { Rectangle bounds = child.Bounds; switch (container.Dock) { case DockStyle.Top: case DockStyle.Bottom: if (bounds.Right >= containerLocalDropPoint.X) { if (containerLocalDropPoint.X < (bounds.Left + bounds.Right) / 2) { container.DockControl(this, index, dimension); return; } } break; case DockStyle.Left: case DockStyle.Right: if (bounds.Bottom >= containerLocalDropPoint.Y) { if (containerLocalDropPoint.Y < (bounds.Top + bounds.Bottom) / 2) { container.DockControl(this, index, dimension); return; } } break; } index += 1; } container.DockControl(this, container.DockedControlList.Count, dimension); }