You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# 如何仅修改Chart控件中指定单个数据点的柱状图颜色

问题原因

你的代码逻辑顺序有问题:moislevel_Tick事件每次触发时都会先清空整个序列的所有数据点,再重新添加新的plant1、plant2数据点,你写在Tick外面的颜色赋值逻辑只会运行一次,新添加的点不会继承之前的颜色设置,而且你原来的变量定义有笔误,两次声明都用了plant1,第二个应该是plant2。

修正方案

把颜色判断逻辑移到Tick事件内部,放在添加完所有数据点之后即可,你要单独改某一个数据点的颜色,直接操作对应下标的Points[index].Color属性是正确的,只是执行时机不对。

完整可运行代码

// 修正变量定义笔误
int plant1 = 470;
int plant2 = 870;

private void moislevel_Tick(object sender, EventArgs e)
{
    mainChart.Series["MoistureLevels"].Points.Clear();
    // 添加两个数据点
    mainChart.Series["MoistureLevels"].Points.AddXY("plant1", plant1);
    mainChart.Series["MoistureLevels"].Points.AddXY("plant2", plant2);
    
    // 添加完点后立刻设置第一个点(plant1)的颜色
    if (plant1 <= 200) 
    {
        this.mainChart.Series["MoistureLevels"].Points[0].Color = Color.Red;
    }
    else if (plant1 > 200 && plant1 <= 550) 
    {
        this.mainChart.Series["MoistureLevels"].Points[0].Color = Color.Yellow;
    }
    else
    {
        this.mainChart.Series["MoistureLevels"].Points[0].Color = Color.Green;
    }

    // 补充第二个点(plant2)的颜色设置逻辑,如果需要的话
    if (plant2 <= 200) 
    {
        this.mainChart.Series["MoistureLevels"].Points[1].Color = Color.Red;
    }
    else if (plant2 > 200 && plant2 <= 550) 
    {
        this.mainChart.Series["MoistureLevels"].Points[1].Color = Color.Yellow;
    }
    else
    {
        this.mainChart.Series["MoistureLevels"].Points[1].Color = Color.Green;
    }

    // 数值递减逻辑放在最后
    plant1 = plant1 - 20;
    plant2 = plant2 - 20;
}

内容的提问来源于stack exchange,提问作者Simon Tewelde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:45:05