在网上找了很多的例子,都不能直接满足自己的需求,所以自己利用下班时间,自己研究了一个工作流程图自定义设计的流程。
先上图图片
初始的画图连线已经实现。
左侧栏直接用的Button按钮,点击按钮 自动添加到右侧pictureBox1容器内
Button bt = new Button(); bt.AutoSize = false; //TODO:如需动态生成每个标签元素位置,请根据实际情况,初始化标签的Location即可。此处默认X=150,Y 以75间隔递增 bt.Location = new Point(20, iPosition); iPosition = iPosition + 60; bt.Size = new Size(89, 36); //bt.BackColor = Color.DarkOliveGreen; bt.ForeColor = bt_ForeColor; //bt.FlatStyle = FlatStyle.Flat; //bt.TextAlign = ContentAlignment.MiddleCenter; bt.Text = btText; bt.Name = bt_Name; //TODO;可以绑定标签元素的右键事件 //label.ContextMenuStrip = contextBlock; pictureBox1.Controls.Add(bt); //拖拽移动 MoveBlock(bt); bt.ContextMenuStrip = this.contextMenuStrip1; bt.Click += new System.EventHandler(bt_click); huoqu_kongjian();
添加的控件在容器被拖动,这个大代码很多,就不直接举例了。
关于控件与控件之间连线用到的事GDI+画图
Point p1 = new Point(t.Item1.Left + t.Item1.Width / 2, t.Item1.Top + t.Item1.Height + 5); Point p2 = new Point(t.Item2.Left + t.Item2.Width / 2, t.Item2.Top - 5); Pen p = new Pen(line_color, line_bold); System.Drawing.Drawing2D.AdjustableArrowCap lineCap = new System.Drawing.Drawing2D.AdjustableArrowCap(6, 6, true); //DrawArrow(g, p, 50, 20, 100, 20); p.DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;//恢复实线 //p.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;//定义线尾的样式为箭头 p.CustomEndCap = lineCap; //p.StartCap = LineCap.Triangle; //p.EndCap = LineCap.ArrowAnchor; e.Graphics.DrawLine(p, p1, p2);
箭头跟随移动则是 在鼠标拖动的时候进行重绘实现。