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));
        }
相关推荐
raoxiaoya1 小时前
golang编译时传递参数或注入变量值到程序中
开发语言·后端·golang
三体世界4 小时前
HTTPS加密原理
linux·开发语言·网络·c++·网络协议·http·https
明月与玄武4 小时前
Python爬虫工作基本流程及urllib模块详解
开发语言·爬虫·python
云空4 小时前
《NuGet:.NET开发的魔法包管理器》
开发语言·.net
王中阳Go4 小时前
北京京东,看看难度
c#·linq
小怡同学..5 小时前
c++系列之智能指针的使用
开发语言·c++
黑客飓风5 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
云博客-资源宝5 小时前
Android Manifest 权限描述大全
android·开发语言·php
是紫焅呢6 小时前
I排序算法.go
开发语言·后端·算法·golang·排序算法·学习方法·visual studio code
周杰伦fans7 小时前
C# 中 string.Compare 比较两个字符串的字典顺序
c#