protected override void OnMouseUp(MouseEventArgs e) { base.OnMouseUp(e); foreach (var paintObject in EndPaintObjects.Union(BeginPaintObjects)) { if (paintObject.TitleBar.Contains(e.Location)) { if (ObjectTitleClicked != null) { ObjectTitleClicked(this, new ItemClickedEventArgs(new ChildPosition { Parent = paintObject.Parent })); } } } if (BeginPoint != null && EndPoint != null && BeginPoint.Child != EndPoint.Child) { if (ConnectChange != null && BeginPoint != EndPoint) { ConnectChange(this, new UpdateConnectEventArgs(EndPoint, BeginPoint)); } BeginPoint = null; Refresh(); } else { ChildPosition beginPoint = null; foreach (var point in BeginPoints.Union(EndPoints)) { if (point.IsNearPoint(e.X, e.Y)) { if (ItemClicked != null) { beginPoint = point; } } } if (beginPoint != null) { ItemClicked(this, new ItemClickedEventArgs(beginPoint)); } } }
protected override void OnPaint(PaintEventArgs e) { base.OnPaint(e); if (!DesignMode && EndPaintObjects != null && BeginPaintObjects != null) { BeginPoints.Clear(); EndPoints.Clear(); e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; var top = 40F; var beginHeight = 40F; var maxBeginWidth = 0F; foreach (var beginObject in BeginPaintObjects) { var beginSize = beginObject.Paint(e.Graphics, BeginPoints, EndPoints, 40, top); if (maxBeginWidth < beginSize.Width) { maxBeginWidth = beginSize.Width; } top += beginSize.Height + 10; beginHeight += beginSize.Height + 10; } var endHeight = 40F; var controlWidth = maxBeginWidth + 240; foreach (var endObject in EndPaintObjects) { var endSize = endObject.Paint(e.Graphics, BeginPoints, EndPoints, maxBeginWidth + 240, endHeight); if (controlWidth < maxBeginWidth + 240 + endSize.Width + 10) { controlWidth = maxBeginWidth + 240 + endSize.Width + 10; } endHeight += endSize.Height + 10; } var controlHeight = Math.Max(endHeight, beginHeight); foreach (var beginPoint in BeginPoints) { foreach (var endPoint in EndPoints) { var ev = new UpdateConnectEventArgs(beginPoint, endPoint); UpdateConnect(this, ev); if (ev.IsConnect) { e.Graphics.DrawLine(new Pen(ev.ConnectorColor), endPoint.Position, beginPoint.Position); } } } if (BeginPoint != null) { var beginPos = BeginPoint.Position; e.Graphics.DrawEllipse(Pens.Blue, beginPos.X - 5, beginPos.Y - 5, 10, 10); if (EndPoint != null) { var endPos = EndPoint.Position; e.Graphics.DrawEllipse(Pens.Blue, endPos.X - 5, endPos.Y - 5, 10, 10); e.Graphics.DrawLine(Pens.Blue, beginPos.X, beginPos.Y, endPos.X, endPos.Y); } else { e.Graphics.DrawLine(Pens.Blue, beginPos.X, beginPos.Y, EndMousePoint.X, EndMousePoint.Y); } } Size = new Size(Convert.ToInt32(controlWidth), Convert.ToInt32(controlHeight)); } }
private void OnDestroy() { List.Remove(this); BeginPoints.Remove(this); FinalPoints.Remove(this); }
protected virtual void Start() { List.Add(this); BeginPoints.Add(this, startPosition); FinalPoints.Add(this, endPosition); }