protected override void OnDragDrop(DragEventArgs pArgs) { base.OnDragDrop(pArgs); // drag DrawingTool & drop. if (DraggingPoint != Point.Empty) { string data = pArgs.Data.GetData(typeof(string)) as string; data.Split(',').All(e => { int lIndex = Convert.ToInt32(e); DrawingTool lDrawingTool = DrawingTools[lIndex]; Point lPoint = GetScrollablePoint(PointToClient(new Point(pArgs.X, pArgs.Y))); InvalidateRect(lDrawingTool.Tracker.SurroundingRect); lDrawingTool.DoDrop(new Point(lPoint.X - DraggingPoint.X, lPoint.Y - DraggingPoint.Y)); InvalidateRect(lDrawingTool.Tracker.SurroundingRect); SelectedTool = lDrawingTool; return(true); }); IsDirty = true; } else { // drag ToolboxItem & drop. ToolboxItem lItem = GetService <IToolboxService>().DeserializeToolboxItem(pArgs.Data); DrawingTool lTool = lItem.CreateComponents(DesignerHost).FirstOrDefault() as DrawingTool; if (lTool != null) { lTool.CreatePersistence(); Point lLocation = GetScrollablePoint(PointToClient(new Point(pArgs.X, pArgs.Y))); Rectangle lRect = lTool.SurroundingRect; lLocation.Offset(-lRect.Width / 2, -lRect.Height / 2); lTool.Location = lLocation; AddTool(lTool); SelectedTool = lTool; InvalidateRect(lTool.SurroundingRect); } } }