问题描述
C#webform中如何实现流程图控件,如图
解决方案
解决方案二:
解决方案三:
推荐NetDiagramhttp://www.fanganwang.com/product/4594
解决方案四:
引用1楼wangnaisheng的回复:我想要的效果是根据数据库动态生成这样一个流程图,有没有这方面的代码?
解决方案五:
引用3楼zhangshengdjy的回复:
Quote: 引用1楼wangnaisheng的回复:我想要的效果是根据数据库动态生成这样一个流程图,有没有这方面的代码?
那你就是在数据库读取数据,自己画图呗,不然的话你就是把图画好,存入数据库,使用的时候在读取出来显示。
解决方案六:
有没有具体的demo代码啊?本人初学,不是很精通啊!
解决方案七:
publicclassPaintPanel:Control{privateintm_gridspace=10;privateboolm_showgrid=true;privateColorm_gridcolor=Color.Blue;privateList<IPaintItem>m_painttiems=newList<IPaintItem>();privateIPaintItemm_ClickedItem=null;privatePenm_pointedBorderPen=newPen(Color.Gray);privatePointm_PointInItem;internalList<IPaintItem>PaintItems{get{returnm_painttiems;}set{m_painttiems=value;Refresh();}}privateBitmapbuffermap=null;privateGraphicsbuffergrp=null;//[DefaultValueAttribute(Color.Blue)]publicColorGridColor{get{returnm_gridcolor;}set{m_gridcolor=value;}}[DefaultValueAttribute(true)]publicboolShowGrid{get{returnm_showgrid;}set{m_showgrid=value;Refresh();}}[DefaultValueAttribute(10)]publicintGridSpace{get{returnm_gridspace;}set{m_gridspace=value;Refresh();}}privateboolm_drawingLink=false;publicboolDrawingLink{get{returnm_drawingLink;}set{m_drawingLink=value;}}publicPaintPanel(){Graphicsgp=Graphics.FromImage(DefaultImage);gp.DrawEllipse(newPen(Color.Red),0,0,DefaultImage.Width,DefaultImage.Height);buffermap=newBitmap(100,100);buffergrp=Graphics.FromImage(buffermap);}privateImageDefaultImage=newBitmap(20,20);privatePenm_anchorpen=newPen(Color.Gray);protectedoverridevoidOnPaint(PaintEventArgse){buffergrp.Clear(this.BackColor);DrawGird();DrawItems();e.Graphics.DrawImage(buffermap,newPoint(0,0));}protectedoverridevoidOnSizeChanged(EventArgse){if(this.Width==0&&this.Height==0){}else{buffermap=newBitmap(this.Width,this.Height);buffergrp=Graphics.FromImage(buffermap);base.OnSizeChanged(e);}}privatevoidDrawGird(){if(this.ShowGrid){Pengridpen=newSystem.Drawing.Pen(m_gridcolor);for(intcolumn=0;column<(int)Math.Ceiling((double)this.Width/(double)m_gridspace);column++){buffergrp.DrawLine(gridpen,newPoint(column*m_gridspace,0),newPoint(column*m_gridspace,this.Height));}for(introw=0;row<(int)Math.Ceiling((double)this.Height/(double)m_gridspace);row++){buffergrp.DrawLine(gridpen,newPoint(0,row*m_gridspace),newPoint(this.Width,row*m_gridspace));}}}privatevoidDrawItems(){foreach(IPaintItemiteminm_painttiems){if(item.ItemImage==null){item.ItemImage=DefaultImage;}item.DrawSelf(buffergrp,m_pointedBorderPen);}}protectedoverridevoidOnMouseDown(MouseEventArgse){if(e.Button==MouseButtons.Left){m_ClickedItem=GetItemAtPoint(e.Location);if(m_ClickedItem!=null){m_PointInItem=newPoint(e.X-m_ClickedItem.ItemLocate.X,e.Y-m_ClickedItem.ItemLocate.Y);}}base.OnMouseDown(e);}protectedoverridevoidOnMouseUp(MouseEventArgse){if(e.Button==MouseButtons.Left){m_ClickedItem=null;}base.OnMouseUp(e);}protectedoverridevoidOnMouseMove(MouseEventArgse){if(e.Button==MouseButtons.Left){if(!m_drawingLink){if(m_ClickedItem!=null){m_ClickedItem.ItemLocate=newPoint(e.Location.X-m_PointInItem.X,e.Location.Y-m_PointInItem.Y);Refresh();}}}else{m_ClickedItem=GetItemAtPoint(e.Location);if(m_ClickedItem!=null){m_ClickedItem.ItemStatus=ItemStatus.Pointed;}else{foreach(IPaintItemiteminm_painttiems){item.ItemStatus=ItemStatus.Watting;}}this.Refresh();}}protectedoverridevoidOnPaintBackground(PaintEventArgspevent){}internalIPaintItemGetItemAtPoint(Pointpoint){foreach(IPaintItemiteminm_painttiems){if((item.ItemLocate.X<point.X&&(item.ItemLocate.X+item.ItemImage.Width)>point.X)&&(item.ItemLocate.Y<point.Y&&(item.ItemLocate.Y+item.ItemImage.Height)>point.Y)){returnitem;}}returnnull;}}[Flags]publicenumItemStatus{Finished=1,Actived=2,Watting=4,Pointed=8}[Serializable]classPaintUnit:FlowChartDemo.IPaintItem{privatestringm_itemname="未命名";publicstringItemName{get{returnm_itemname;}set{m_itemname=value;}}privateImagem_itemImage=null;publicImageItemImage{get{returnm_itemImage;}set{m_itemImage=value;}}privateItemStatusm_itemstatus;publicItemStatusItemStatus{get{returnm_itemstatus;}set{m_itemstatus=value;}}privatePointm_itemlocate;publicPointItemLocate{get{returnm_itemlocate;}set{m_itemlocate=value;}}privateFontm_itemFont;publicFontItemFont{get{returnm_itemFont;}set{m_itemFont=value;}}publicPaintUnit(){}publicPaintUnit(stringitemname,ImageitemImage,ItemStatusitemstatus,Pointitemlocate,PenitemPen,FontitemFont){m_itemname=itemname;m_itemImage=itemImage;m_itemstatus=itemstatus;m_itemlocate=itemlocate;m_itemFont=itemFont;}publicvoidDrawSelf(Graphicsgrp,Penpen){grp.DrawImage(ItemImage,ItemLocate);SizeFnamesize=grp.MeasureString(ItemName,this.ItemFont);PointFnamepoint=newPointF();namepoint.Y=ItemLocate.Y+ItemImage.Height+5;namepoint.X=ItemLocate.X+(ItemImage.Width-namesize.Width)/2;grp.DrawString(ItemName,this.ItemFont,newSolidBrush(Color.Black),namepoint);if((ItemStatus&ItemStatus.Pointed)==ItemStatus.Pointed){grp.DrawRectangle(pen,ItemLocate.X-3,ItemLocate.Y-3,ItemImage.Width+6,ItemImage.Height+6);}}}[Serializable]publicclassPaintLink:FlowChartDemo.IPaintItem{privatestringm_itemname="未命名";publicstringItemName{get{returnm_itemname;}set{m_itemname=value;}}privateImagem_itemImage=null;publicImageItemImage{get{returnm_itemImage;}set{m_itemImage=value;}}privateItemStatusm_itemstatus;publicItemStatusItemStatus{get{returnm_itemstatus;}set{m_itemstatus=value;}}privatePointm_itemlocate;publicPointItemLocate{get{returnm_itemlocate;}set{m_itemlocate=value;}}privateFontm_itemFont;publicFontItemFont{get{returnm_itemFont;}set{m_itemFont=value;}}privatePaintUnitm_startPoint;internalPaintUnitStartPoint{get{returnm_startPoint;}set{m_startPoint=value;}}privatePaintUnitm_endPoint;internalPaintUnitEndPoint{get{returnm_endPoint;}set{m_endPoint=value;}}publicPaintLink(){}publicPaintLink(stringitemname,ItemStatusitemstatus,Pointitemlocate,PenitemPen,FontitemFont){m_itemname=itemname;m_itemstatus=itemstatus;m_itemlocate=itemlocate;m_itemFont=itemFont;}publicvoidDrawSelf(Graphicsgrp,Penpen){if(m_startPoint!=null&&m_endPoint!=null){grp.DrawLine(pen,m_startPoint.ItemLocate,m_endPoint.ItemLocate);}}}
解决方案八:
我也不会啊正需要
解决方案九:
引用5楼zhangshengdjy的回复:
有没有具体的demo代码啊?本人初学,不是很精通啊!
这个极其简单的开源设计器就可以。若代码看不懂,那就没人能帮你啦。