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));
        }
相关推荐
SmartSoftHelp开发辅助优化12 小时前
C# WinForm 编程高手:程序,进程,线程。程序,窗体,UI,后台。是如何协调工作的?深度解析>SmartSoftHelp魔法精灵工作室
microsoft·ui·c#
天***889613 小时前
js封装一个双精度算法实现
开发语言·前端·javascript
.小小陈.13 小时前
数据结构2:单链表
c语言·开发语言·数据结构·笔记·学习方法
Camel卡蒙13 小时前
数据结构——二叉搜索树Binary Search Tree(介绍、Java实现增删查改、中序遍历等)
java·开发语言·数据结构
Algebraaaaa13 小时前
什么是前端、后端与全栈开发,Qt属于什么?
开发语言·前端·qt
立志成为大牛的小牛13 小时前
数据结构——二十三、并查集的终极优化(王道408)
开发语言·数据结构·笔记·学习·程序人生·考研
纵有疾風起14 小时前
C++模版:模板初阶及STL简介
开发语言·c++·经验分享·开源
QT 小鲜肉14 小时前
【个人成长笔记】Qt Creator快捷键终极指南:从入门到精通
开发语言·c++·笔记·qt·学习·学习方法
子豪-中国机器人14 小时前
《C++ STL 基础入门》教案
java·开发语言
消失的旧时光-194314 小时前
ScheduledExecutorService
android·java·开发语言