C# 怎么做chat柱状图能实现不同的颜色,还带游标

1:最近做一个项目,需要用到chat图表应用,需要显示柱状图,但是每一个柱状图需要不同的颜色,还要显示多个游标

2:网上找了半天,没有类似的,自己动手做一个~

3:上效果图:

是不是还可以,下面完整的解析下代码:

(1):直接动态生成

cs 复制代码
//定义chat对象以及游标
  private Chart chart;
  private VerticalLineAnnotation cursor1;
  private VerticalLineAnnotation cursor2;
  private TextAnnotation diffAnnotation;
  private Random random = new Random(); 

//动态生成chat控件
 chart = new Chart();
 chart.Dock = DockStyle.Fill;
 chart.BackColor = Color.White;
 chart.BorderlineColor = Color.Gray;
 chart.BorderlineDashStyle = ChartDashStyle.Solid;
 chart.BorderlineWidth = 1;

(2):添加图表区域:图表的数据都是在这里添加进去的

cs 复制代码
    // 添加图表区域
    ChartArea chartArea = new ChartArea("MainArea");
    chartArea.BackColor = Color.WhiteSmoke;
    chartArea.AxisX.Title = "类别";
    chartArea.AxisY.Title = "数值";
    chartArea.AxisX.MajorGrid.LineColor = Color.LightGray;
    chartArea.AxisY.MajorGrid.LineColor = Color.LightGray;
    chart.ChartAreas.Add(chartArea);

(3): 添加柱状图系列,这里就生成数据,然后 绑定

cs 复制代码
  // 添加柱状图系列
  Series barSeries = new Series("柱状图数据");
  barSeries.ChartType = SeriesChartType.Column;
  barSeries.BorderWidth = 1;
  barSeries.BorderColor = Color.Black;

  // 添加10个随机数据的柱子,每个柱子不同颜色
  string[] categories = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J" };
  for (int i = 0; i < 10; i++)
  {
      int value = random.Next(20, 100);
      DataPoint point = new DataPoint(i, value);
      point.Color = GetRandomColor();
      point.Label = value.ToString();
      point.Font = new Font("Arial", 8, FontStyle.Bold);
      point.LabelForeColor = Color.Black;
      barSeries.Points.Add(point);
  }

  chart.Series.Add(barSeries);

(4):设置轴标签

cs 复制代码
 // 设置X轴标签 
chartArea.AxisX.Interval = 1;
 chartArea.AxisX.LabelStyle.Angle = -45;
 for (int i = 0; i < categories.Length; i++)
 {
     barSeries.Points[i].AxisLabel = categories[i];
 }

(5):设置游标,这里设置了两个

cs 复制代码
            // 创建第一个游标(红色)
            cursor1 = new VerticalLineAnnotation
            {
                Name = "Cursor1",
                AxisX = chartArea.AxisX,
                X = 3, // 初始位置在第4个柱子(D)中间
                IsInfinitive = true,
                LineColor = Color.Red,
                LineWidth = 2,
                ClipToChartArea = chartArea.Name,
                AllowMoving = true,
                IsSizeAlwaysRelative = false,
                AnchorY = chartArea.AxisY.Maximum // 确保游标从顶部开始
            };
            chart.Annotations.Add(cursor1);

            // 创建第二个游标(蓝色)
            cursor2 = new VerticalLineAnnotation
            {
                Name = "Cursor2",
                AxisX = chartArea.AxisX,
                X = 7, // 初始位置在第8个柱子(H)中间
                IsInfinitive = true,
                LineColor = Color.Blue,
                LineWidth = 2,
                ClipToChartArea = chartArea.Name,
                AllowMoving = true,
                IsSizeAlwaysRelative = false,
                AnchorY = chartArea.AxisY.Maximum // 确保游标从顶部开始
            };
            chart.Annotations.Add(cursor2);

(6):最终将控件加载到窗体显示

cs 复制代码
   // 将图表添加到窗体
   this.Controls.Add(chart);

*有一个生成随机颜色的中间函数

cs 复制代码
        private Color GetRandomColor()
        {
            return Color.FromArgb(random.Next(50, 200), random.Next(50, 200), random.Next(50, 200));
        }
相关推荐
lly20240612 小时前
HTML与CSS:构建网页的基石
开发语言
一只会写代码的猫12 小时前
面向高性能计算与网络服务的C++微内核架构设计与多线程优化实践探索与经验分享
java·开发语言·jvm
是小胡嘛13 小时前
C++之Any类的模拟实现
linux·开发语言·c++
csbysj202014 小时前
Vue.js 混入:深入理解与最佳实践
开发语言
Gerardisite16 小时前
如何在微信个人号开发中有效管理API接口?
java·开发语言·python·微信·php
Want59516 小时前
C/C++跳动的爱心①
c语言·开发语言·c++
coderxiaohan16 小时前
【C++】多态
开发语言·c++
gfdhy16 小时前
【c++】哈希算法深度解析:实现、核心作用与工业级应用
c语言·开发语言·c++·算法·密码学·哈希算法·哈希
Eiceblue17 小时前
通过 C# 将 HTML 转换为 RTF 富文本格式
开发语言·c#·html
故渊ZY17 小时前
Java 代理模式:从原理到实战的全方位解析
java·开发语言·架构