知识大全 如何在C#的WinForm中制作饼状图和柱状图

Posted 图形

篇首语:仰天大笑出门去,我辈岂是蓬蒿人。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 如何在C#的WinForm中制作饼状图和柱状图相关的知识,希望对你有一定的参考价值。

如何在C#的WinForm中制作饼状图和柱状图  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  当我们的软件需要各种饼状图和柱状图来表示数据时 我们或许会想到用Offices中的图形控件或是第三方控件 但现在的第三方控件大都需要注册 有些免费的控件会有开发商的标记等 而对于使用Offices的图形控件来说 并不能在程序中得于很好控制 其使用的简易程度也较低 所以在这我给出在C#中使用GDI+实现饼状图和柱状图跟数据库联接显示数据的方法

  using System;using System IO;//用于文件存取using System Data;//用于数据访问using System Drawing;//提供画GDI+图形的基本功能using System Drawing Text;//提供画GDI+图形的高级功能using System Drawing Drawing D;//提供画高级二维 矢量图形功能using System Drawing Imaging;//提供画GDI+图形的高级功能namespace BaseLayerpublic class PieChartpublic PieChart()//Render是图形大标题 图开小标题 图形宽度 图形长度 饼图的数据集和饼图的数据集要表示出来的数据public Image Render(string title string subTitle int width int height DataSet chartData int DataLine)const int SIDE_LENGTH = ;const int PIE_DIAMETER = ;DataTable dt = chartData Tables[ ];

  //通过输入参数 取得饼图中的总基数float sumData = ;foreach(DataRow dr in dt Rows)sumData += Convert ToSingle(dr[DataLine]);//产生一个image对象 并由此产生一个Graphics对象Bitmap bm = new Bitmap(width height);Graphics g = Graphics FromImage(bm);//设置对象g的属性g ScaleTransform((Convert ToSingle(width))/SIDE_LENGTH (Convert ToSingle(height))/SIDE_LENGTH);g SmoothingMode = SmoothingMode Default;g TextRenderingHint = TextRenderingHint AntiAlias;

  //画布和边的设定g Clear(Color White);g DrawRectangle(Pens Black SIDE_LENGTH SIDE_LENGTH );//画饼图标题g DrawString(title new Font( Tahoma ) Brushes Black new PointF( ));//画饼图的图例g DrawString(subTitle new Font( Tahoma ) Brushes Black new PointF( ));//画饼图float curAngle = ;float totalAngle = ;for(int i= ;i<dt Rows Count;i++)curAngle = Convert ToSingle(dt Rows[i][DataLine]) / sumData * ;

  g FillPie(new SolidBrush(ChartUtil GetChartItemColor(i)) PIE_DIAMETER PIE_DIAMETER totalAngle curAngle);g DrawPie(Pens Black PIE_DIAMETER PIE_DIAMETER totalAngle curAngle);totalAngle += curAngle;//画图例框及其文字g DrawRectangle(Pens Black );g DrawString( 图表说明 new Font( Tahoma FontStyle Bold) Brushes Black new PointF( ));

  //画图例各项PointF boxOrigin = new PointF( );PointF textOrigin = new PointF( );float percent = ;for(int i= ;i<dt Rows Count;i++)g FillRectangle(new SolidBrush(ChartUtil GetChartItemColor(i)) boxOrigin X boxOrigin Y );g DrawRectangle(Pens Black boxOrigin X boxOrigin Y );percent = Convert ToSingle(dt Rows[i][DataLine]) / sumData * ;g DrawString(dt Rows[i][ ] ToString() + + dt Rows[i][ ] ToString() + ( + percent ToString( ) + %) new Font( Tahoma ) Brushes Black textOrigin);boxOrigin Y += ;textOrigin Y += ;//回收资源g Dispose();return (Image) bm;

  

  //画条形图public class BarChartpublic BarChart()//Render是图形大标题 图开小标题 图形宽度 图形长度 饼图的数据集和饼图的数据集public Image Render(string title string subTitle int width int height DataSet chartData)const int SIDE_LENGTH = ;const int CHART_TOP = ;const int CHART_HEIGHT = ;const int CHART_LEFT = ;const int CHART_WIDTH = ;DataTable dt = chartData Tables[ ];

  //计算最高的点float highPoint = ;foreach(DataRow dr in dt Rows)if(highPoint<Convert ToSingle(dr[ ]))highPoint = Convert ToSingle(dr[ ]);//建立一个Graphics对象实例Bitmap bm = new Bitmap(width height);tryGraphics g = Graphics FromImage(bm);//设置条图图形和文字属性g ScaleTransform((Convert ToSingle(width))/SIDE_LENGTH (Convert ToSingle(height))/SIDE_LENGTH);g SmoothingMode = SmoothingMode Default;g TextRenderingHint = TextRenderingHint AntiAlias;

  //设定画布和边g Clear(Color White);g DrawRectangle(Pens Black SIDE_LENGTH SIDE_LENGTH );//画大标题g DrawString(title new Font( Tahoma ) Brushes Black new PointF( ));//画小标题g DrawString(subTitle new Font( Tahoma ) Brushes Black new PointF( ));//画条形图float barWidth = CHART_WIDTH / (dt Rows Count * );PointF barOrigin = new PointF(CHART_LEFT + (barWidth / ) );float barHeight = dt Rows Count;for(int i= ;i<dt Rows Count;i++)barHeight = Convert ToSingle(dt Rows[i][ ]) * / highPoint * ;barOrigin Y = CHART_TOP + CHART_HEIGHT barHeight;g FillRectangle(new SolidBrush(ChartUtil GetChartItemColor(i)) barOrigin X barOrigin Y barWidth barHeight);barOrigin X = barOrigin X + (barWidth * );//设置边g DrawLine(new Pen(Color Black ) new Point(CHART_LEFT CHART_TOP) new Point(CHART_LEFT CHART_TOP + CHART_HEIGHT));g DrawLine(new Pen(Color Black ) new Point(CHART_LEFT CHART_TOP + CHART_HEIGHT) new Point(CHART_LEFT + CHART_WIDTH CHART_TOP + CHART_HEIGHT));//画图例框和文字g DrawRectangle(new Pen(Color Black ) );g DrawString( 图表说明 new Font( Tahoma FontStyle Bold) Brushes Black new PointF( ));

  //画图例PointF boxOrigin = new PointF( );PointF textOrigin = new PointF( );for(int i= ;i<dt Rows Count;i++)g FillRectangle(new SolidBrush(ChartUtil GetChartItemColor(i)) boxOrigin X boxOrigin Y );g DrawRectangle(Pens Black boxOrigin X boxOrigin Y );g DrawString(dt Rows[i][ ] ToString() + + dt Rows[i][ ] ToString() new Font( Tahoma ) Brushes Black textOrigin);boxOrigin Y += ;textOrigin Y += ;//输出图形g Dispose();return bm;catchreturn bm;public class ChartUtilpublic ChartUtil()public static Color GetChartItemColor(int itemIndex)Color selectedColor;switch(itemIndex)case :selectedColor = Color Blue;break;case :selectedColor = Color Red;break;case :selectedColor = Color Yellow;break;case :selectedColor = Color Purple;break;default:selectedColor = Color Green;break;return selectedColor;

cha138/Article/program/net/201311/11951

相关参考

知识大全 C#在winform中查找控件

C#在winform中查找控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ///<su

知识大全 c#中使用多线程访问winform中控件

  我们在做winform应用的时候大部分情况下都会碰到使用多线程控制界面上控件信息的问题然而我们并不能用传统方法来做这个问题下面我将详细的介绍  首先来看传统方法  publicpartialcla

知识大全 在C#中使用LOG4NET(winform程序)

在C#中使用LOG4NET(winform程序)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!下载

怎样分析MACD指标中的柱状图?

怎样分析MACD指标中的柱状图?如何分析MACD指标中的柱状图?MACD指标中的柱状图的分析?在股市电脑分析软件中(如钱龙软件)通常采用DIF值减DEA(即MACD、DEM)值而绘制成柱状图,用红柱状

如何分析MACD指标中的柱状图?

如何分析MACD指标中的柱状图?分析MACD指标中的柱状图的技巧?在股市电脑分析软件中通常采用DIF值减DEA(即MACD、DEM)值而绘制成柱状图,用红柱状和绿柱状表示,红柱表示正值,绿柱表示负值。

MACD指标中的柱状图分析

MACD指标中的柱状图:在股市电脑分析软件中通常采用DIF值减DEA(即MACD、DEM)值而绘制成柱状图,用红柱状和绿柱状表示,红柱表示正值,绿柱表示负值。用红绿柱状来分析行情,既直观明了又实用可靠

知识大全 在C#中跨线程访问Winform控件

在C#中跨线程访问Winform控件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在程序需要读

知识大全 用java生成缩略图和给图上打上公司logo

  这是我前两天写的生成图片的缩略图和给图片打上logo的java代码没有怎么整理就放上来了希望能够为大家在工作中帮点忙同时写的有什么不对的地方希望大家指点指点  importjavaawtGraph

根据采样、保持器的一般结构形式图和工作原理波形图,说明其工作原理。

根据采样、保持器的一般结构形式图和工作原理波形图,说明其工作原理。采样/保持器一般结构形式采样/保持器工作原理波形图参考答案:在t1时刻前,控制电路的驱动信号为高电平时,模拟开关K闭合,模拟输入信号U

根据采样、保持器的一般结构形式图和工作原理波形图,说明其工作原理。

根据采样、保持器的一般结构形式图和工作原理波形图,说明其工作原理。采样/保持器一般结构形式采样/保持器工作原理波形图参考答案:在t1时刻前,控制电路的驱动信号为高电平时,模拟开关K闭合,模拟输入信号U