强大的Winform Chart图表控件使用说明

强大的Winform Chart图表控件使用说明强大的 WinformChart 图表控件使用说明引言使用说明使用示例资料引言以前经常开发网页端的软件 图表组件一般用 echart 功能和样式都非常齐全 但是当用 winform 开发时 类似的组件就很少了 而且稍微好点的都还收费 后来探索了下 winform 自带的 chart 控件 发现其功能非常强大 只要你有好看的设计图 基本上都可以按设计图调整出来 下面展示下自己做技术测试的图片 使用说明

强大的Winform Chart图表控件使用说明

引言

使用说明

工具箱数据分组中我们就可以看到chart控件,使用时拖拽到界面即可。可以通过属性面板设置其样式,也可以通过代码来调整样式。设置的属性可参照:
https://www.cnblogs.com/arxive/p/5861960.html

总结了部分设置chart样式功能的通用类:

 public class ChartHelper { ///  /// Name:添加序列 /// Author:by boxuming 2019-04-28 13:59 ///  /// 图表对象 /// 序列名称 /// 图表类型 /// 颜色 /// 标记点颜色 /// 是否显示数值 public static void AddSeries(Chart chart, string seriesName, SeriesChartType chartType, Color color, Color markColor, bool showValue = false) { chart.Series.Add(seriesName); chart.Series[seriesName].ChartType = chartType; chart.Series[seriesName].Color = color; if (showValue) { chart.Series[seriesName].IsValueShownAsLabel = true; chart.Series[seriesName].MarkerStyle = MarkerStyle.Circle; chart.Series[seriesName].MarkerColor = markColor; chart.Series[seriesName].LabelForeColor = color; chart.Series[seriesName].LabelAngle = -90; } } ///  /// Name:设置标题 /// Author:by boxuming 2019-04-28 14:25 ///  /// 图表对象 /// 图表名称 public static void SetTitle(Chart chart, string chartName, Font font, Docking docking, Color foreColor) { chart.Titles.Add(chartName); chart.Titles[0].Font = font; chart.Titles[0].Docking = docking; chart.Titles[0].ForeColor = foreColor; } ///  /// Name:设置样式 /// Author:by boxuming 2019-04-23 14:04 ///  /// 图表对象 /// 背景颜色 /// 字体颜色 public static void SetStyle(Chart chart, Color backColor, Color foreColor) { chart.BackColor = backColor; chart.ChartAreas[0].BackColor = backColor; chart.ForeColor = Color.Red; } ///  /// Name:设置图例 /// Author:by boxuming 2019-04-23 14:30 ///  /// 图表对象 /// 停靠位置 /// 对齐方式 /// 背景颜色 /// 字体颜色 public static void SetLegend(Chart chart, Docking docking, StringAlignment align, Color backColor, Color foreColor) { chart.Legends[0].Docking = docking; chart.Legends[0].Alignment = align; chart.Legends[0].BackColor = backColor; chart.Legends[0].ForeColor = foreColor; } ///  /// Name:设置XY轴 /// Author:by boxuming 2019-04-23 14:35 ///  /// 图表对象 /// X轴标题 /// Y轴标题 /// 坐标轴标题对齐方式 /// 坐标轴字体颜色 /// 坐标轴颜色 /// 坐标轴箭头样式 /// X轴的间距 /// Y轴的间距 public static void SetXY(Chart chart, string xTitle, string yTitle, StringAlignment align, Color foreColor, Color lineColor, AxisArrowStyle arrowStyle, double xInterval, double yInterval) { chart.ChartAreas[0].AxisX.Title = xTitle; chart.ChartAreas[0].AxisY.Title = yTitle; chart.ChartAreas[0].AxisX.TitleAlignment = align; chart.ChartAreas[0].AxisY.TitleAlignment = align; chart.ChartAreas[0].AxisX.TitleForeColor = foreColor; chart.ChartAreas[0].AxisY.TitleForeColor = foreColor; chart.ChartAreas[0].AxisX.LabelStyle = new LabelStyle() { ForeColor = foreColor }; chart.ChartAreas[0].AxisY.LabelStyle = new LabelStyle() { ForeColor = foreColor }; chart.ChartAreas[0].AxisX.LineColor = lineColor; chart.ChartAreas[0].AxisY.LineColor = lineColor; chart.ChartAreas[0].AxisX.ArrowStyle = arrowStyle; chart.ChartAreas[0].AxisY.ArrowStyle = arrowStyle; chart.ChartAreas[0].AxisX.Interval = xInterval; chart.ChartAreas[0].AxisY.Interval = yInterval; } ///  /// Name:设置网格 /// Author:by boxuming 2019-04-23 14:55 ///  /// 图表对象 /// 网格线颜色 /// X轴网格的间距 /// Y轴网格的间距 public static void SetMajorGrid(Chart chart, Color lineColor, double xInterval, double yInterval) { chart.ChartAreas[0].AxisX.MajorGrid.LineColor = lineColor; chart.ChartAreas[0].AxisY.MajorGrid.LineColor = lineColor; chart.ChartAreas[0].AxisX.MajorGrid.Interval = xInterval; chart.ChartAreas[0].AxisY.MajorGrid.Interval = yInterval; } } 

使用示例

文章开头展示的图片中的四个统计图表可通过以下代码实现:

 chart1.Series.Clear(); ChartHelper.AddSeries(chart1, "柱状图", SeriesChartType.Column, Color.Lime, Color.Red, true); ChartHelper.AddSeries(chart1, "曲线图", SeriesChartType.Spline, Color.Red, Color.Red); ChartHelper.SetTitle(chart1, "柱状图与曲线图", new Font("微软雅黑", 12), Docking.Bottom, Color.White); ChartHelper.SetStyle(chart1, Color.Transparent, Color.White); ChartHelper.SetLegend(chart1, Docking.Top, StringAlignment.Center, Color.Transparent, Color.White); ChartHelper.SetXY(chart1, "序号", "数值", StringAlignment.Far, Color.White, Color.White, AxisArrowStyle.SharpTriangle, 1, 2); ChartHelper.SetMajorGrid(chart1, Color.Gray, 20, 2); chart2.Series.Clear(); ChartHelper.AddSeries(chart2, "饼状图", SeriesChartType.Pie, Color.Lime, Color.Red, true); ChartHelper.SetStyle(chart2, Color.Transparent, Color.White); ChartHelper.SetLegend(chart2, Docking.Top, StringAlignment.Center, Color.Transparent, Color.White); chart3.Series.Clear(); ChartHelper.AddSeries(chart3, "曲线图", SeriesChartType.SplineRange, Color.FromArgb(100,46, 199, 201), Color.Red, true); ChartHelper.SetTitle(chart3, "曲线图", new Font("微软雅黑", 12), Docking.Bottom, Color.FromArgb(46, 199, 201)); ChartHelper.SetStyle(chart3, Color.Transparent, Color.White); ChartHelper.SetLegend(chart3, Docking.Top, StringAlignment.Center, Color.Transparent, Color.White); ChartHelper.SetXY(chart3, "序号", "数值", StringAlignment.Far, Color.White, Color.White, AxisArrowStyle.SharpTriangle, 1, 2); ChartHelper.SetMajorGrid(chart3, Color.Gray, 20, 2); chart4.Series.Clear(); ChartHelper.AddSeries(chart4, "饼状图", SeriesChartType.Funnel, Color.Lime, Color.Red, true); ChartHelper.SetStyle(chart4, Color.Transparent, Color.White); ChartHelper.SetLegend(chart4, Docking.Top, StringAlignment.Center, Color.Transparent, Color.White); RefreshData(); 

其中,均是通过调用通用类来进行设置,这样更方便一些。最后的RefreshData()是绑定图表数据的部分,否则没有数据的话图表是无法显示的。绑定数据部分代码如下:

 public void RefreshData() { List 
  
    x1 = new List 
   
     () { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; List 
    
      y1 = new List 
     
       (); Random ra = new Random(); y1 = new List 
      
        () { ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10), ra.Next(1, 10) }; RefreshChart(x1, y1, "chart1"); RefreshChart(x1, y1, "chart2"); RefreshChart(x1, y1, "chart3"); RefreshChart(x1, y1, "chart4"); } public delegate void RefreshChartDelegate(List 
       
         x, List 
        
          y, string type); public void RefreshChart(List 
         
           x, List 
          
            y, string type) { if (type == "chart1") { if (this.chart1.InvokeRequired) { RefreshChartDelegate stcb = new RefreshChartDelegate(RefreshChart); this.Invoke(stcb, new object[] { x, y, type }); } else { chart1.Series[0].Points.DataBindXY(x, y); chart1.Series[1].Points.DataBindXY(x, y); } } else if (type == "chart2") { if (this.chart2.InvokeRequired) { RefreshChartDelegate stcb = new RefreshChartDelegate(RefreshChart); this.Invoke(stcb, new object[] { x, y, type }); } else { chart2.Series[0].Points.DataBindXY(x, y); List 
           
             colors = new List 
            
              () { Color.Red, Color.DarkRed, Color.IndianRed, Color.MediumVioletRed, Color.OrangeRed, Color.PaleVioletRed, Color.Purple, Color.DarkOrange, Color.Maroon, Color.LightCoral, Color.LightPink, Color.Magenta }; DataPointCollection points = chart2.Series[0].Points; for (int i = 0; i < points.Count; i++) { points[i].Color = colors[i]; } } } else if (type == "chart3") { if (this.chart3.InvokeRequired) { RefreshChartDelegate stcb = new RefreshChartDelegate(RefreshChart); this.Invoke(stcb, new object[] { x, y, type }); } else { chart3.Series[0].Points.DataBindXY(x, y); } } else if (type == "chart4") { if (this.chart4.InvokeRequired) { RefreshChartDelegate stcb = new RefreshChartDelegate(RefreshChart); this.Invoke(stcb, new object[] { x, y, type }); } else { chart4.Series[0].Points.DataBindXY(x, y); List 
             
               colors = new List 
              
                () { Color.Red, Color.DarkRed, Color.IndianRed, Color.MediumVioletRed, Color.OrangeRed, Color.PaleVioletRed, Color.Purple, Color.DarkOrange, Color.Maroon, Color.LightCoral, Color.LightPink, Color.Magenta }; DataPointCollection points = chart4.Series[0].Points; for (int i = 0; i < points.Count; i++) { points[i].Color = colors[i]; } } } } 
               
              
             
            
           
          
         
        
       
      
     
    
  

为了让图表展现动画效果,添加了一个定时器,用来实时改变数据,这样就可以看到动起来的图表了。定时器代码如下:

 private void Timer1_Tick(object sender, EventArgs e) { new Thread(new ThreadStart(RefreshData)).Start(); } 

资料

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205638.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午5:33
下一篇 2026年3月19日 下午5:33


相关推荐

  • Lerp 函数本质理解

    Lerp 函数本质理解今天写了两个知识点 发现 CSDN 上都是抄过来抄过去 虽然看看别人写的能解决自己一大部分困惑 然而深入以后还是有不能理解透彻的地方 所以自己把自己理解的加在后面 如有不对 望指教 Unity 中好几个 Lerp 函数 而对于 Lerp 函数的本质 我以前只知道个大概 参考了别人写的 觉得还是不够清晰 截图加上自己的详细理解如下 参考资料 http www manew com blog

    2026年3月26日
    3
  • 2021github仓库操作流程手册指南「建议收藏」

    2021github仓库操作流程手册指南「建议收藏」文章目录1.git操作2.git简介3.git安装4.git使用1.git初始化2.git设置用户信息3.git项目的拉取1.创建仓库2.本地初始化3.查看当前是否存在自己的账号信息并配置(包含步骤4)4.基础配置5.初始化内容6.开始引入自己的项目的地址7.更新操作8.git文件的添加保存和推送到github9.git文件的修改删除推送github10.gitpush操作每次都需要输入账号密码的解决办法5.总结至此git的仓库创建,仓库拉取到本地,文件的添加修改删除提交已经完成。其中遇到

    2022年7月16日
    21
  • eclipse中没有SERVER的解决办法(详细版)

    eclipse中没有SERVER的解决办法(详细版)用 eclipese 写网页很多时候需要配置 tomcat 但有些朋友跟着网上的教程配置发现 eclipse gt Window gt Preferences 里没有 server 从而配置不了 RuntimeEnvir 所以需要通过 eclipse 进行安装 下面给出解决办法首先 获取你的 eclipse 的版本类型 点击 help gt abouteclipse

    2026年3月26日
    2
  • Eric6安装及配置

    Eric6安装及配置Eric 是一个全功能的 python 编辑器和 IDE 用 python 编写 与 PyQt5 结合 满足了用 python 快速对 GUI 开发的需求为了以后自己能更快安装 我这里做个简易的记录 大家有什么不明白的可以问我 1 下载及安装 Eric6 下载因为最近的几个官方版本不支持汉化 所以我做了链接 实在想用中文的请点击这个下载 https download csdn net do

    2026年3月20日
    2
  • 下载文件总结

    下载文件总结

    2021年9月20日
    74
  • 通过nginx日志统计一段时间内ip的访问次数进行排序&访问量统计

    通过nginx日志统计一段时间内ip的访问次数进行排序&访问量统计

    2021年6月4日
    112

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号