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));
        }
相关推荐
hqxstudying21 分钟前
Java异常处理
java·开发语言·安全·异常
wjs20243 小时前
状态模式(State Pattern)
开发语言
我命由我123453 小时前
Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)
java·开发语言·jvm·windows·java-ee·kotlin·list
liulilittle3 小时前
C++ TAP(基于任务的异步编程模式)
服务器·开发语言·网络·c++·分布式·任务·tap
励志要当大牛的小白菜5 小时前
ART配对软件使用
开发语言·c++·qt·算法
唐青枫6 小时前
C#.NET dapper 详解
c#·.net
爱装代码的小瓶子7 小时前
数据结构之队列(C语言)
c语言·开发语言·数据结构
死也不注释8 小时前
【鸡零狗碎记录】
unity·c#
Maybe_ch8 小时前
.NET-键控服务依赖注入
开发语言·c#·.net
超浪的晨8 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发