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
相关产品推荐
相关产品推荐

