.Net chart control for .net framework 3.5
文章类型:原创文章
摘要:
这个案例指在介绍微软这套免费又功能强大的图表控件Microsoft Chart Controls for Microsoft .NET Framework 3.5,通过它,可让您的项目及报表,轻松套用各种功能强大的 2D、3D、实时变化的动态图表;且透过 AJAX,可让图表及里面的数据,每秒钟都持续更新;使用者透过浏览器,可和图表做各种互动设定
下面结合BBVS项目中温度功能模块中温度曲线的绘制 做了如下Demo,供大家学习微软的这款功能强大的图标控件,这里只是起一个抛砖引玉的作用,更多更好玩的功能还等大家不断进一步去挖掘!
首先,让大家瞧瞧Chart控件的庐山真面目和组成吧,不然有些对不住大家,呵呵
一、需引用的DLL
要想利用这个功能强大的控件,首先必须引用以下DLL和相关文件:
1. 在WinForm应用程序中要想使用该图表控件,需引用如下DLL:
System.Windows.Forms.DataVisualization.Design.dll
System.Windows.Forms.DataVisualization.dll
System.Windows.Forms.DataVisualization.xml
2. 在Web应用程序中要想使用该图表控件,需引用如下DLL:
System.Web.DataVisualization.dll
System.Web.DataVisualization.Design.dll
System.Web.DataVisualization.xml
二、采用WinForm程序使用该图表控件
1. 创建一个WinForm工程: DemoCollection
2. 添加一个Form窗体: FrmChartDemo
3. 添加所需的DLL引用
4. 在该窗体的Load事件函数中动态创建好Chart对象实例
5. 添加一个Timer控件,在Timer控件的Tick事件函数中向Chart中添加坐标值(X值和Y值),然后在窗体中绘制出来.
6. FrmChartDemo的后台代码如下:
FrmChartDemo.cs:
namespace DemoCollection
{
public partial class FrmChartDemo : Form
{
#region the variable definiton
private Chart chart1;
private Random random = new Random();
private int maxYValue = 20 ;
private int minYValue = 0 ;
#endregion
#region Ctor
public FrmChartDemo()
{
InitializeComponent();
this .Load += new EventHandler(FrmChartDemo_Load);
this .timer1.Tick += new EventHandler(timer1_Tick);
}
#endregion
#region the event handler
void FrmChartDemo_Load( object sender, EventArgs e)
{
#region from BBVS porject
// Create a Chart
chart1 = new Chart();
// Create Chart Area
ChartArea chartArea1 = new ChartArea();
// Add Chart Area to the Chart
chart1.ChartAreas.Add(chartArea1);
#region Set the Chart
// Set the chart style
chart1.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom;
chart1.BackSecondaryColor = System.Drawing.Color.White;
chart1.BorderlineColor = System.Drawing.Color.FromArgb((( int )((( byte )( 26 )))), (( int )((( byte )( 59 )))), (( int )((( byte )( 105 )))));
chart1.BorderlineDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Solid;
chart1.BorderlineWidth = 2 ;
chart1.BorderSkin.SkinStyle = System.Windows.Forms.DataVisualization.Charting.BorderSkinStyle.Emboss;
chart1.BackColor = Color.SteelBlue;
chart1.Dock = DockStyle.Fill;
chartArea1.Area3DStyle.Inclination = 15 ;
chartArea1.Area3DStyle.IsClustered = true ;
chartArea1.Area3DStyle.IsRightAngleAxes = false ;
chartArea1.Area3DStyle.Perspective = 10 ;
chartArea1.Area3DStyle.Rotation = 10 ;
chartArea1.Area3DStyle.WallWidth = 0 ;
// 设置是否启用 3D 效果
// chartArea1.Area3DStyle.Enable3D = true;
chartArea1.AxisX.LabelStyle.Font = new System.Drawing.Font( " Trebuchet MS " , 8.25F , System.Drawing.FontStyle.Bold);
chartArea1.AxisX.LabelStyle.Format = " hh:mm:ss " ;
chartArea1.AxisX.LabelStyle.Interval = 5D; // 10D;
chartArea1.AxisX.LabelStyle.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Seconds;
chartArea1.AxisX.LineColor = System.Drawing.Color.FromArgb((( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))));
chartArea1.AxisX.MajorGrid.Interval = 5D; // 10D;
chartArea1.AxisX.MajorGrid.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Seconds;
chartArea1.AxisX.MajorGrid.LineColor = System.Drawing.Color.FromArgb((( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))));
chartArea1.AxisX.MajorTickMark.Interval = 5D; // 10D;
chartArea1.AxisX.MajorTickMark.IntervalType = System.Windows.Forms.DataVisualization.Charting.DateTimeIntervalType.Seconds;
chartArea1.AxisY.IsLabelAutoFit = false ;
chartArea1.AxisY.IsStartedFromZero = false ;
chartArea1.AxisY.LabelStyle.Font = new System.Drawing.Font( " Trebuchet MS " , 8.25F , System.Drawing.FontStyle.Bold);
chartArea1.AxisY.LineColor = System.Drawing.Color.FromArgb((( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))));
chartArea1.AxisY.MajorGrid.LineColor = System.Drawing.Color.FromArgb((( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))));
#region 设置 Y 轴的 最大值和 最小值
chartArea1.AxisY.Maximum = this .maxYValue + 6 ;
chartArea1.AxisY.Minimum = this .minYValue - 6 ;
#endregion
chartArea1.BackColor = System.Drawing.Color.FromArgb((( int )((( byte )( 64 )))), (( int )((( byte )( 165 )))), (( int )((( byte )( 191 )))), (( int )((( byte )( 228 )))));
chartArea1.BackGradientStyle = System.Windows.Forms.DataVisualization.Charting.GradientStyle.TopBottom;
chartArea1.BackSecondaryColor = System.Drawing.Color.White;
chartArea1.BorderColor = System.Drawing.Color.FromArgb((( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 64 )))));
chartArea1.BorderDashStyle = System.Windows.Forms.DataVisualization.Charting.ChartDashStyle.Solid;
chartArea1.InnerPlotPosition.Auto = false ;
chartArea1.InnerPlotPosition.Height = 85F;
chartArea1.InnerPlotPosition.Width = 86F;
chartArea1.InnerPlotPosition.X = 8.3969F ;
chartArea1.InnerPlotPosition.Y = 3.63068F ;
chartArea1.Name = " Default " ;
chartArea1.Position.Auto = false ;
chartArea1.Position.Height = 86.76062F ;
chartArea1.Position.Width = 88F;
chartArea1.Position.X = 5.089137F ;
chartArea1.Position.Y = 5.895753F ;
chartArea1.ShadowColor = System.Drawing.Color.Transparent;
#endregion
#region Create a Legend
Legend legend1 = new Legend();
legend1.Alignment = System.Drawing.StringAlignment.Far;
legend1.BackColor = System.Drawing.Color.Transparent;
legend1.DockedToChartArea = " Default " ;
legend1.Docking = System.Windows.Forms.DataVisualization.Charting.Docking.Top;
legend1.Font = new System.Drawing.Font( " Trebuchet MS " , 8.25F , System.Drawing.FontStyle.Bold);
legend1.IsTextAutoFit = false ;
legend1.LegendStyle = System.Windows.Forms.DataVisualization.Charting.LegendStyle.Row;
legend1.Name = " Default " ;
chart1.Legends.Add(legend1);
#endregion
#region Create a Series
Series series1 = new Series();
series1.BorderColor = System.Drawing.Color.FromArgb((( int )((( byte )( 180 )))), (( int )((( byte )( 26 )))), (( int )((( byte )( 59 )))), (( int )((( byte )( 105 )))));
series1.ChartArea = " Default " ;
series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.FastLine; // Line;
series1.Color = System.Drawing.Color.FromArgb((( int )((( byte )( 224 )))), (( int )((( byte )( 64 )))), (( int )((( byte )( 10 )))));
series1.Legend = " Default " ;
series1.Name = " Series1 " ;
series1.ShadowOffset = 1 ;
series1.YValuesPerPoint = 2 ;
chart1.Series.Add(series1);
// 设置是否在 Chart 中显示 坐标点值
series1.IsValueShownAsLabel = true ;
#endregion
// Set chart control location
chart1.Location = new System.Drawing.Point( 0 , 0 );
// Add chart control to the form
this .Controls.AddRange( new System.Windows.Forms.Control[] { this .chart1 });
#endregion
}
void timer1_Tick( object sender, EventArgs e)
{
double tempValue = 0.0 ;
// 随机产生 温度值
tempValue = random.Next( this .minYValue, this .maxYValue);
DateTime timeStamp = DateTime.Now;
double xValue = DateTime.Now.ToOADate();
// 向 Chart中 添加 X轴 和 Y轴的 值
chart1.Series[ " Series1 " ].Points.AddXY(xValue, tempValue);
// remove all points from the source series older than 20 seconds.
double removeBefore = timeStamp.AddSeconds(( double )( 20 ) * ( - 1 )).ToOADate();
// remove oldest values to maintain a constant number of data points
if (chart1.Series[ 0 ].Points.Count > 0 )
{
while (chart1.Series[ 0 ].Points[ 0 ].XValue < removeBefore)
{
chart1.Series[ 0 ].Points.RemoveAt( 0 );
}
chart1.ChartAreas[ 0 ].AxisX.Minimum = chart1.Series[ 0 ].Points[ 0 ].XValue;
chart1.ChartAreas[ 0 ].AxisX.Maximum = DateTime.FromOADate(chart1.Series[ 0 ].Points[ 0 ].XValue).AddSeconds( 20 ).ToOADate();
}
else
{
// chart1.ChartAreas[0].AxisX.Minimum = (double)minTempThreshold;
// chart1.ChartAreas[0].AxisX.Maximum = (double)maxTempThreshold;
}
chart1.Invalidate();
}
#endregion
}
}
三、运行结果如下
1. 运行效果如下:
该图表的意义是:Y轴显示的是温度值,X轴显示的是时间值. 除此之外,我们也可以改变Chart控件的相关属性来改变其显示样式.
如:
2. 添加代码:
chartArea1.Area3DStyle.Enable3D = true ;
以3D效果显示Chart控件
3. 添加代码:
series1.IsValueShownAsLabel = true ;
显示坐标点值
4. 添加代码:
series1.ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Spline;
已曲线形式显示温度值
谢谢阅读,希望该文对您有所帮助,欢迎转载!版权所有!
相关学习参考资料:
http://www.cnblogs.com/WizardWu/archive/2008/11/01/1324097.html
http://www.cnblogs.com/fhmsha/archive/2008/11/26/new_asp_dot_net_chart_is_released.html