c# winfom从0开发OA、BPM工作流程与自定义表单系统(十)流程中心-流程设计器
·







![]()

如同我第一个版本一样
版本一功能说明一下:
1.支持拖动绘制工作节点
2.支持移动每个节点的移动
3.支持直线连接节点
4.支持节点移动连接线自动跟随
5.支持高亮显示选中的节点连线
6.支持能删除选中节点和连线
7.支持选中节点能显示节点的属性,同时可以进行节点更改
8.支持能保存已绘制流程图(后续可根据个人情况配置,入库或者配置文件)
9.支持能加载保存后的数据(根据入库或者配置文件做相对应的开发)
10.支持能绘制节点和线的文字
11.支持能自动计算两个节点之间的连接点,不要手动调整
12.支持修改节点文字颜色背景颜色等等功能
13.支持绘制超出边界自动回显功能
14.支持节点右键删除功能
15.支持连接线高亮右键删除功能
最后说明:软件基于 +GDI 绘制工作流程图 软件没有使用任何第三方插件。方便新手进行拓展其他功能开发。
当前版本因为实在整个系统里面,所以使用的是数据库(MYSQL)进行的存储
流程纯GDI+没有使用任何第三方
都是代码实现的
try
{
lab_connect.Text = "-";
// 获取当前鼠标位置
Point p = new Point();
p.X = e.X;
p.Y = e.Y;
foreach (Tuple<ButtonX, ButtonX, int, string> t in lines)
{
// 进行计算连线箭头的位置
Point p1 = new Point();
Point p2 = new Point();
if (t.Item1.Top + t.Item1.Height < t.Item2.Top)
{
p1 = new Point(t.Item1.Left + t.Item1.Width / 2, t.Item1.Top + t.Item1.Height);
p2 = new Point(t.Item2.Left + t.Item2.Width / 2, t.Item2.Top);
}
else if (t.Item1.Top > t.Item2.Top + t.Item2.Height)
{
p1 = new Point(t.Item1.Left + t.Item1.Width / 2, t.Item1.Top);
p2 = new Point(t.Item2.Left + t.Item2.Width / 2, t.Item2.Top + t.Item2.Height);
}
if (t.Item1.Top + t.Item1.Height * 4 < t.Item2.Top)
{
p1 = new Point(t.Item1.Left + t.Item1.Width / 2, t.Item1.Top + t.Item1.Height);
p2 = new Point(t.Item2.Left + t.Item2.Width / 2, t.Item2.Top);
}
else if (t.Item1.Top > t.Item2.Top + t.Item2.Height * 4)
{
p1 = new Point(t.Item1.Left + t.Item1.Width / 2, t.Item1.Top);
p2 = new Point(t.Item2.Left + t.Item2.Width / 2, t.Item2.Top + t.Item2.Height);
}
else if (t.Item1.Left + t.Item1.Width < t.Item2.Left)
{
p1 = new Point(t.Item1.Left + t.Item1.Width, t.Item1.Top + t.Item1.Height / 2);
p2 = new Point(t.Item2.Left, t.Item2.Top + t.Item2.Height / 2);
}
else if (t.Item1.Left > t.Item2.Left + t.Item2.Width)
{
p1 = new Point(t.Item1.Left, t.Item1.Top + t.Item1.Height / 2);
p2 = new Point(t.Item2.Left + t.Item2.Width, t.Item2.Top + t.Item2.Height / 2);
}
newPen.CustomEndCap = lineCap;
bool is_hover = LineIsHover.GetPointIsInLine(p, p1, p2, 2);
g = this.pictureBox1.CreateGraphics();
if (is_hover)
{
lab_connect.Text = t.Item4;
newPen.Color = Color.Red;
g.DrawLine(newPen, p1, p2);
}
else
{
newPen.Color = Color.SeaGreen;
g.DrawLine(newPen, p1, p2);
}
}
}
catch (Exception ex)
{ }
更多推荐


所有评论(0)