C# webform如何实现流程图控件

问题描述

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代码啊?本人初学,不是很精通啊!

这个极其简单的开源设计器就可以。若代码看不懂,那就没人能帮你啦。

时间: 2024-09-10 04:48:04

C# webform如何实现流程图控件的相关文章

WinForm中类似WebForm中的CheckBoxList控件

web|控件 前些天,在.Net技术的论坛里面看到了有个帖子,我好像记得是怎么实现WinForm中类似WebForm中的CheckBoxList控件,我简单的实现了那样的一个控件 首先,你得建立一个控件项目,假如说是: 接着,你就添加一个类:CheckBoxCollection,它是个CheckBox的集合类 具体的代码如下 CheckBoxCollection.cs using System;using System.Collections;using System.Windows.Forms

业务流程图控件FlowChart.NET自定义样式问题

问题描述 业务流程图控件FlowChart.NET如何实现自定义样式?可以直接从现有的类中派生么? 解决方案 可以啊,可以通过从最接近的现有类型派生,比如要是自定义ShapeNode,自定义样式需要从ShapeNodeStyle继承.你看一下:FlowChart.NET如何自定义样式http://www.evget.com/zh-CN/Info/catalog/18995.html

C#,Webform项目,Devexpress控件,做了Group分组,请问怎么在数据绑定时把行号定好,现在我每打开一个分组,行号就更新一次

问题描述 C#,Webform项目,Devexpress控件,做了Group分组,请问怎么在数据绑定时把行号定好,现在我每打开一个分组,行号就更新一次 解决方案 解决方案二:分组的时候提前把行号计算好

ASP.NET MVC如何显示WebForm网页或UserControl控件

学习与使用ASP.NET MVC这样久,还是对asp.net念念不忘.能否在asp.net mvc去显示aspx或是user control呢? 这个灵感(算不上灵感,只能算是想法)是来自前些天有写过一篇<多个视图结果显示于一个共用预览视图内>http://www.cnblogs.com/insus/p/3633298.html 其中有一个Render方法.以致想起以前开发asp.net时,也经常Render用户控件.即是说把网页经过Render之后,转换为是一串字符串. 那我们也一定可以把这

Webform 异步怎么更新控件的值

问题描述 如题,我使用的异步编程模型,在返回结果后要更新UI上面控件的值,应该怎么实现呢 解决方案 解决方案二:System.Messaging.MessageQueuemyQueue=newMessageQueue(".\private$\myqueue");myQueue.ReceiveCompleted+=newReceiveCompletedEventHandler((Objectsource,ReceiveCompletedEventArgsasyncResult)=>

.NET各大平台数据列表控件绑定原理及比较(WebForm、Winform、WPF)

说说WebForm: 数据列表控件: WebForm 下的列表绑定控件基本就是GridView.DataList.Repeater:当然还有其它DropDownList.ListBox等.   它们的共同的设置数据源方法: XXX.DataSource=数据源.   那么这个数据源的格式,究竟有啥要求?最简单的方式是随便给弄个,然后等它抛异常:     从上面的错误可以看的出来,基本上支持三种数据源绑定方式:IListSource,IEnumerable,IDataSource.   说说Win

怎样在页面和页面的用户控件进行交互

交互|控件|页面|交互|控件 有的时候想在页面中调用这个页面的用户控件的方法有的时候想在页面中设置这个页面的用户控件中的控件的值下面是解决方案首先建立一个用户控件uc.ascx放置一个Label并且设置它的值为testthis.Label1.Text="test";在这个用户控件内加入一个方法public void aa() { this.Label1.Text="在页面中调用这个页面的用户控件的方法成功"; }创建一个webform导入这个用户控件<%@ R

ASP.NET MVC如何显示UserControl控件(扩展篇)

昨晚Insus.NET有怀旧一下<念念不忘,ASP.NET MVC显示WebForm网页或UserControl控件>http://www.cnblogs.com/insus/p/3641610.html 那仅是小小尝试,还有很多不明的地方. 那一篇其中有Render用户控件ascx的.如今Insus.NET想重构它一下,让步其能在Action或是Razor语法中使用. 创建一个AscxUtility.cs,这们我们可以在应用程序中多个地方使用. 这样我们就可以重构一下昨晚那个public A

.Net中给TreeView控件的节点赋id值

1,首先说明,这个TreeView控件是属于Winform下的控件. 2,用惯Webform的朋友肯定知道,Webform下的TreeView控件是有SelectedNode.Text和SelectedNode.Value这两个属性的.但是,Winform下的TreeView控件却没有SelectedNode.Value这个属性,因此有很多朋友都碰到一个问题,如何把例如像id的值赋给这个TreeView呢? 3,多数的Winform控件都有Tag这个属性.对,我们就是要用Tag来对节点赋id值.