C# 流程图demo

1、向panel添加控件。

2、panel控件中的控件可以自由拖动。

3、控件之间连线。

4、连线的控件,拖动时更新连线。

 流程图连接线

//流程图连接线
        private void draggablePanel1_Paint()
        {
          
                Graphics g = this.draggablePanel1.CreateGraphics();
                g.Clear(this.BackColor);
                Pen pen = new Pen(Color.Black, 2);

             foreach (var lineitem in line)
             {
             
                // 流程图连接线
                g.DrawLine(pen, lineitem.Start.X, lineitem.Start.Y, lineitem.End.X, lineitem.End.Y);

                // 箭头
                int arrowSize = 6;
                Point[] arrowPoints = { new Point(lineitem.End.X, lineitem.End.Y), new Point(lineitem.End.X - arrowSize, lineitem.End.Y - arrowSize), new Point(lineitem.End.X - arrowSize, lineitem.End.Y + arrowSize) };
                g.FillPolygon(Brushes.Black, arrowPoints);
             
            }
             Invalidate();
        }

 添加画线坐标到集合

 //添加画线坐标到集合
        private void Addline()
        {
            int StartX = 0;
            int StartY = 0;
            int EndX = 0;
            int EndY = 0;
            if (!string.IsNullOrEmpty(downlinef) && !string.IsNullOrEmpty(downlines))
            {
                foreach (Control ctr in draggablePanel1.Controls)
                {
                    if (ctr.Name == downlinef)
                    {
                        int w = ctr.Width / 2;
                        int h = ctr.Height / 2;

                        StartX = ctr.Location.X + w;
                        StartY = ctr.Location.Y + h;
                    }

                    if (ctr.Name == downlines)
                    {
                        int w = ctr.Width / 2;
                        int h = ctr.Height / 2;

                        EndX = ctr.Location.X + w;
                        EndY = ctr.Location.Y - 6;
                    }

                }
                line.Add(new ctrline(new Point(StartX, StartY), new Point(EndX, EndY), downlinef, downlines));
            }

        }

移动控件时更新画线坐标

 private void updateline(string ctrname,Point currlocation)
        {
            if (line.Count > 0)
            {
                for (int i = 0; i < line.Count; i++)
                {
                    if (line[i].Ctrname == ctrname)
                    {
                        line[i].Start=currlocation;

                        txtmsg.Text += "开始" + ctrname + " X:" + currlocation.X + ",Y:" + currlocation.Y + "\r\n";
                       
                    }
                     if (line[i].EndCtrname == ctrname)
                    {
                        line[i].End = currlocation;
                        txtmsg.Text += "结束" + ctrname + " X:" + currlocation.X + ",Y:" + currlocation.Y + "\r\n";
                    }
                }
            }
        }

暂时先这样,后续再优化……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
XML流程图是使用XML(可扩展标记语言)格式描述的一种流程图形式。XML是一种用于描述、存储和交换数据的标记语言,它具有良好的可读性和易于解析的特点。在XML流程图中,我们可以使用标签、属性和文本来描述流程图中的各个组件和其之间的关系。 XML流程图的基本结构包括根元素和各个子元素。根元素通常代表整个流程图的外框,而子元素则代表流程图中的各个组件,如开始节点、决策节点、任务节点、并行节点等。每个组件都可以使用标签来表示,例如<start>表示开始节点,<decision>表示决策节点。而属性则用于描述组件的属性,如id表示组件的唯一标识,name表示组件的名称等。 在XML流程图中,我们还可以使用文本来描述组件之间的关系和流程逻辑。例如使用<transition>元素来描述两个节点之间的转换关系,<condition>元素来描述决策节点的判断条件等。通过定义这些关系和条件,我们可以清晰地表示流程图中的各个步骤和流程顺序。 XML流程图的优点是具有良好的可读性和可扩展性。由于XML具有自我描述性,因此可以方便地修改和扩展流程图,而不需要修改任何代码。同时,XML流程图还可以与其他系统进行集成,通过解析XML文件,可以实现与其他系统的数据交换和共享。 总而言之,XML流程图是一种使用XML格式描述的流程图形式,它具有可读性、可扩展性和与其他系统的集成性的优点。通过使用XML流程图,我们可以方便地描述和管理各种复杂流程,提升工作效率和流程透明度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值