当前位置:编程学习 > asp >>

ASP. NET(C#)画曲线图

ASP. NET(C#)画曲线图:用的控件,及详细代码,与数据库联系
谢谢!
答案:
曲线图是用DrawLine()函数将各个点一点一点连接起来,所以大部分时候也叫折线图。但是.NET中还有一个DrawCurve()函数,它可以直接画出一条曲线或者折线,还可以设置张力(Tension)值,比用DrawLine()方便
private void InitializeGraph()
{
//根据给定的高度和宽度创建一个位图图像
objBitmap = new Bitmap(Width,Height);
//从指定的 objBitmap 对象创建 objGraphics 对象 (即在objBitmap对象中画图)
objGraphics = Graphics.FromImage(objBitmap);
//根据给定颜色(LightGray)填充图像的矩形区域 (背景)
objGraphics.DrawRectangle(new Pen(BorderColor,1),0,0,Width,Height);
objGraphics.FillRectangle(new SolidBrush(BgColor),1,1,Width-2,Height-2);
//画X轴,pen,x1,y1,x2,y2 注意图像的原始X轴和Y轴计算是以左上角为原点,向右和向下计算的
objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor),1),100,Height - 100,Width - 75,Height - 100);
//画Y轴,pen,x1,y1,x2,y2
objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor),1),100,Height - 100,100,75);
//初始化轴线说明文字
SetAxisText(ref objGraphics);
//初始化X轴上的刻度和文字
SetXAxis(ref objGraphics);
//初始化Y轴上的刻度和文字
SetYAxis(ref objGraphics);
//初始化标题
CreateTitle(ref objGraphics);
}
具体每个函数有什么作用代码注释已经很清楚了。现在我们继续来看SetAxisText()
private void SetAxisText(ref Graphics objGraphics)
{
objGraphics.DrawString(XAxisText,new Font("宋体",10),new SolidBrush(AxisTextColor),Width/2 - 50,Height - 50);
int X = 30;
int Y = (Height/2) - 50;
for(int i = 0;i < YAxisText.Length;i++)
{
objGraphics.DrawString(YAxisText[i].ToString(),new Font("宋体",10),new SolidBrush(AxisTextColor),X,Y);
Y += 15;
}
}
SetAxisText()的作用是初始化轴线的说明文字,注意这不是刻度上的文字哦。呵呵,下边这两个才是初始化刻度和刻度上的文字,SetXAxis()和SetYAxis():
private void SetXAxis(ref Graphics objGraphics)
{
int x1 = 100;
int y1 = Height - 110;
int x2 = 100;
int y2 = Height - 90;
int iCount = 0;
int iSliceCount = 1;
float Scale = 0;
int iWidth = (int)((Width-200)*(50/XSlice));
objGraphics.DrawString(Keys[0].ToString(),new Font("宋体",10),new SolidBrush(SliceTextColor),85,Height - 90);
for(int i = 0;i <= iWidth;i += 10)
{
Scale = i * ( XSlice / 50 );
if(iCount == 5)
{
objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor)),x1+Scale,y1,x2+Scale,y2);
}
答案补充
上面的大括号删掉
//The Point!这里显示X轴刻度
if(iSliceCount <= Keys.Length-1)
{
objGraphics.DrawString(Keys[iSliceCount].ToString(),new Font("宋体",10),new SolidBrush(SliceTextColor),x1 + Scale - 15,y2);
}
else
{
//超过范围,不画任何刻度文字
}
iCount = 0;
iSliceCount++;
if(x1+Scale > Width - 100)
{
break;
}
}else{
objGraphics.DrawLine(new Pen(new SolidBrush(SliceColor)),x1+Scale,y1+5,x2+Scale,y2-5);
}
iCount++;
}
}

上一个:C#画一个非空心的菱形?
下一个:c#中如何引用checkbox实现记住密码?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,