• 分享一个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),仅供参考。
  • 相关阅读:
    负载均衡——LVS DR模式
    Java之BigDecimal详解
    Spring AOP代理对象创建流程
    spring aop切面不生效
    aspectj-autoproxy Controller未生效解决方案
    jvm参数分类
    dubbo优雅停机
    Dubbo 协议注意项
    dubbo provider
    查找java_home的安装路径
  • 原文地址:https://www.cnblogs.com/zzy0471/p/1942316.html
Copyright © 2020-2023  润新知