分享一个winForm下的Chart控件

  本来可以用MsChart的,但是客户有两个需求(绘制指定值的分割线;以对数方式显示数据)不好满足,只好自己写了一个,代码很乱,不过可以给有类似需求的同学以参考,顺便也请大家帮忙看看bug,因为要在项目中用,时间匆忙,也未做仔细测试,请感兴趣的园友帮忙看看,给点意见,谢谢。

  本控件和Ms控件相比,功能比较简单,实用为上,没有那么多属性可以设置,以下是为满足特定需求而添加的属性

  • 添加了一个用于插入分割线的属性
  • 添加了一种以对数形式显示数据的图表

  暂时这样,用到其他功能时再加,:-D。以下是使用示例:

     示例1:折线图

     示例2:区域图

     示例3:点图

     示例4:饼图

     示例5:对数折线图

  示例1:折线图

代码
private void InitChart()
{
this.chart1.BackColor = Color.Black;

this.chart1.ChartArea.ChartType = Enums.ChartType.Line;
this.chart1.ChartArea.Data = this.dsTest1.Tables[0];
this.chart1.ChartArea.XValueMember = "F_X";

StringInfo chartTitle
= new StringInfo();
chartTitle.Value
= "LineChart";
chartTitle.Color
= Color.DarkBlue;
chartTitle.Size
= 15;
this.chart1.ChartArea.ChartTitle = chartTitle;

this.chart1.ChartArea.AxisLineColor = Color.DarkSeaGreen;
this.chart1.ChartArea.AxisLineWidth = 2;

PartingLine line
= new PartingLine();
line.YValue
= 50;
line.LineColor
= Color.GreenYellow;
this.chart1.ChartArea.PartingLines.Add(line);

StringInfo axisXLable
= new StringInfo();
axisXLable.Size
= 12;
axisXLable.Color
= Color.Silver;
axisXLable.Value
= "时间";
this.chart1.ChartArea.AxisX.Lable = axisXLable;

this.chart1.ChartArea.AxisX.Interval = 1;
this.chart1.ChartArea.AxisX.IntervalType = Enums.InervalType.Hours;
this.chart1.ChartArea.AxisX.TimeFormat = "MM-dd HH:mm";
this.chart1.ChartArea.AxisX.Grid.LineColor = Color.RosyBrown;
this.chart1.ChartArea.AxisX.Grid.LineStyle = Enums.LineStyle.DashDot;
this.chart1.ChartArea.AxisX.ShowGrid = true;

StringInfo axisYLable
= new StringInfo();
axisYLable.Size
= 12;
axisYLable.Color
= Color.Silver;
axisYLable.Value
= "数据";
this.chart1.ChartArea.AxisY1.Lable = axisYLable;

this.chart1.ChartArea.AxisY1.Interval = 10;
this.chart1.ChartArea.AxisY1.IntervalType = Enums.InervalType.Number;
this.chart1.ChartArea.AxisY1.Grid.LineColor = Color.SaddleBrown;
this.chart1.ChartArea.AxisY1.Grid.LineStyle = Enums.LineStyle.DashDot;
this.chart1.ChartArea.AxisY1.ShowGrid = true;

Series series1
= new Series();
series1.Name
= "SeriesOne";
series1.Color
= Color.Red;
series1.Width
= 1;
series1.YValueMember
= "F_Y1";
this.chart1.ChartArea.Series.Add(series1);

Series series2
= new Series();
series2.Name
= "SeriesTwo";
series2.Color
= Color.RoyalBlue;
series2.Width
= 1;
series2.YValueMember
= "F_Y2";
this.chart1.ChartArea.Series.Add(series2);

Series series3
= new Series();
series3.Name
= "SeriesThree";
series3.Color
= Color.SeaShell;
series3.Width
= 1;
series3.YValueMember
= "F_Y3";
this.chart1.ChartArea.Series.Add(series3);
}

 

示例2:区域图

代码
private void InitChart()
{
this.chart1.BackColor = Color.Black;

this.chart1.ChartArea.ChartType = Enums.ChartType.Area;
this.chart1.ChartArea.Data = this.dsTest1.Tables[0];
this.chart1.ChartArea.XValueMember = "F_Y1";

StringInfo chartTitle
= new StringInfo();
chartTitle.Value
= "AreaChart";
chartTitle.Color
= Color.DarkBlue;
chartTitle.Size
= 15;
this.chart1.ChartArea.ChartTitle = chartTitle;

this.chart1.ChartArea.AxisLineColor = Color.DarkSeaGreen;
this.chart1.ChartArea.AxisLineWidth = 2;

StringInfo axisXLable
= new StringInfo();
axisXLable.Size
= 12;
axisXLable.Color
= Color.Silver;
axisXLable.Value
= "时间";
this.chart1.ChartArea.AxisX.Lable = axisXLable;

this.chart1.ChartArea.AxisX.Interval = 0.5;
this.chart1.ChartArea.AxisX.IntervalType = Enums.InervalType.Number;
// this.chart1.ChartArea.AxisX.TimeFormat = "yyyy-MM";
this.chart1.ChartArea.AxisX.Grid.LineColor = Color.RosyBrown;
this.chart1.ChartArea.AxisX.Grid.LineStyle = Enums.LineStyle.DashDot;
this.chart1.ChartArea.AxisX.ShowGrid = true;

StringInfo axisYLable
= new StringInfo();
axisYLable.Size
= 12;
axisYLable.Color
= Color.Silver;
axisYLable.Value
= "数据";
this.chart1.ChartArea.AxisY1.Lable = axisYLable;

this.chart1.ChartArea.AxisY1.Interval = 10;
this.chart1.ChartArea.AxisY1.IntervalType = Enums.InervalType.Number;
this.chart1.ChartArea.AxisY1.Grid.LineColor = Color.SaddleBrown;
this.chart1.ChartArea.AxisY1.Grid.LineStyle = Enums.LineStyle.DashDot;
this.chart1.ChartArea.AxisY1.ShowGrid = true;

Series series1
= new Series();
series1.Name
= "SeriesOne";
//series1.Color = Color.Red;
series1.Width = 1;
series1.YValueMember
= "F_Y1";
this.chart1.ChartArea.Series.Add(series1);

Series series2
= new Series();
series2.Name
= "SeriesTwo";
//series2.Color = Color.RoyalBlue;
series2.Width = 1;
series2.YValueMember
= "F_Y2";
this.chart1.ChartArea.Series.Add(series2);

Series series3
= new Series();
series3.Name
= "SeriesThree";
//series3.Color = Color.SeaShell;
series3.Width = 1;
series3.YValueMember
= "F_Y3";
this.chart1.ChartArea.Series.Add(series3);
}

 

示例3:点图

代码
private void InitChart()
{
this.chart1.BackColor = Color.Black;

this.chart1.ChartArea.ChartType = Enums.ChartType.Dot;
this.chart1.ChartArea.Data = this.dsTest1.Tables[0];
this.chart1.ChartArea.XValueMember = "F_X";

StringInfo chartTitle
= new StringInfo();
chartTitle.Value
= "LineChart";
chartTitle.Color
= Color.DarkBlue;
chartTitle.Size
= 15;
this.chart1.ChartArea.ChartTitle = chartTitle;

this.chart1.ChartArea.AxisLineColor = Color.DarkSeaGreen;
this.chart1.ChartArea.AxisLineWidth = 2;

PartingLine line
= new PartingLine();
line.YValue
= 50;
line.LineColor
= Color.GreenYellow;
this.chart1.ChartArea.PartingLines.Add(line);

StringInfo axisXLable
= new StringInfo();
axisXLable.Size
= 12;
axisXLable.Color
= Color.Silver;
axisXLable.Value
= "时间";
this.chart1.ChartArea.AxisX.Lable = axisXLable;

this.chart1.ChartArea.AxisX.Interval = 1;
this.chart1.ChartArea.AxisX.IntervalType = Enums.InervalType.Hours;
this.chart1.ChartArea.AxisX.TimeFormat = "MM-dd HH:mm";
this.chart1.ChartArea.AxisX.Grid.LineColor = Color.RosyBrown;
this.chart1.ChartArea.AxisX.Grid.LineStyle = Enums.LineStyle.DashDot;
this.chart1.ChartArea.AxisX.ShowGrid = true;

StringInfo axisYLable
= new StringInfo();
axisYLable.Size
= 12;
axisYLable.Color
= Color.Silver;
axisYLable.Value
= "数据";
this.chart1.ChartArea.AxisY1.Lable = axisYLable;

this.chart1.ChartArea.AxisY1.Interval = 10;
this.chart1.ChartArea.AxisY1.IntervalType = Enums.InervalType.Number;
this.chart1.ChartArea.AxisY1.Grid.LineColor = Color.SaddleBrown;
this.chart1.ChartArea.AxisY1.Grid.LineStyle = Enums.LineStyle.DashDot;
this.chart1.ChartArea.AxisY1.ShowGrid = true;

Series series1
= new Series();
series1.Name
= "SeriesOne";
series1.Color
= Color.Red;
series1.Width
= 4;//最小设置为2,再小了看不见了
series1.YValueMember = "F_Y1";
this.chart1.ChartArea.Series.Add(series1);
}

 

示例4:饼图

代码
private void InitChart()
{
this.chart1.ChartArea.Data = _testDt;
this.chart1.ChartArea.ChartType = Ultra.OpenChart.Entities.Enums.ChartType.Pie;
StringInfo title
= new StringInfo();
title.Value
= "PieChart";
title.Size
= 14;
title.Color
= Color.Salmon;
this.chart1.ChartArea.ChartTitle = title;
chart1.ChartArea.XValueMember
= "Country";

Series series
= new Series();
series.YValueMember
= "Number";
this.chart1.ChartArea.Series.Add(series);
}

 

示例5:对数折线图

代码
private void InitChart()
{
this.chart1.BackColor = Color.Black;

this.chart1.ChartArea.ChartType = Enums.ChartType.LogarithmLine;
this.chart1.ChartArea.Data = this.dsTest1.Tables[0];
this.chart1.ChartArea.XValueMember = "F_X";
this.chart1.ChartArea.BaseNumber = 10;

StringInfo chartTitle
= new StringInfo();
chartTitle.Value
= "LogarithmLineChart";
chartTitle.Color
= Color.DarkBlue;
chartTitle.Size
= 15;
this.chart1.ChartArea.ChartTitle = chartTitle;

this.chart1.ChartArea.AxisLineColor = Color.DarkSeaGreen;

StringInfo axisXLable
= new StringInfo();
axisXLable.Size
= 12;
axisXLable.Color
= Color.Silver;
axisXLable.Value
= "时间";
this.chart1.ChartArea.AxisX.Lable = axisXLable;

this.chart1.ChartArea.AxisX.Interval = 0.5;
this.chart1.ChartArea.AxisX.IntervalType = Enums.InervalType.Hours;
this.chart1.ChartArea.AxisX.TimeFormat = "MM-dd HH:mm";
this.chart1.ChartArea.AxisX.MinVAlue = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, 0, 0).ToOADate();

this.chart1.ChartArea.AxisY1.Grid.LineColor = Color.RosyBrown;
this.chart1.ChartArea.AxisY1.Grid.LineStyle = Enums.LineStyle.DashDot;
this.chart1.ChartArea.AxisY1.ShowGrid = true;
this.chart1.ChartArea.AxisY1.MinVAlue = 0.001;

StringInfo axisYLable
= new StringInfo();
axisYLable.Size
= 12;
axisYLable.Color
= Color.Silver;
axisYLable.Value
= "数据";
this.chart1.ChartArea.AxisY1.Lable = axisYLable;

this.chart1.ChartArea.AxisY1.Interval = 1;
this.chart1.ChartArea.AxisY1.IntervalType = Enums.InervalType.Number;

Series series1
= new Series();
series1.Name
= "SeriesOne";
series1.Color
= Color.Sienna;
series1.Width
= 1;
series1.YValueMember
= "F_Y2";
this.chart1.ChartArea.Series.Add(series1);

PartingLine line
= new PartingLine();
line.LineColor
= Color.RosyBrown;
line.LineWidth
= 2;
line.YValue
= 1500;
this.chart1.ChartArea.PartingLines.Add(line);
}

 

  此外,还有对数点图和对数区域图,都差不多,不再赘述
     最近发现老多的bug(2011-1-27 13:15:27),仅供参考。
posted @ 2011-01-23 09:46  会长  阅读(8212)  评论(29编辑  收藏  举报