当启用时,根据系列[索引]更改图表系列颜色
本文关键字:系列 颜色 索引 启用 | 更新日期: 2023-09-27 18:10:16
就一个。我有一个图形,有可能显示9个不同的系列,数据来自用户的文本框,并填充这些各自的系列。
图表被链接到一个checkkedlistbox,并且在列表框中被选中的项在图表上启用它们各自的系列。每次只能启用2个系列,使用下面的代码可以正常工作:
private void chListBoxChartSeries_ItemCheck(object sender, ItemCheckEventArgs e)
{
if (e.NewValue == CheckState.Checked && chListBoxChartSeries.CheckedItems.Count >= 2)
{
e.NewValue = CheckState.Unchecked;
}
}
public void saveChartSeries()
{
//placeholder variable to relate between checklist item and chart series
string seriesName;
for (int index = 0; index < chListBoxChartSeries.Items.Count; ++index)
{
seriesName = chListBoxChartSeries.Items[index].ToString();
if (chListBoxChartSeries.CheckedItems.Contains(chListBoxChartSeries.Items[index]))
{
main.chartVitals.Series[seriesName].Enabled = true;
}
else
{
main.chartVitals.Series[seriesName].Enabled = false;
}
}
}
有一件事我想做下面这个,我希望任何系列被启用设置为一个颜色(第一个系列红色,第二个系列蓝色为例)。我正在努力寻找一种有效的方法来做到这一点,但我认为它涉及到将两个索引中的第一个设置为一种颜色(红色),第二个设置为另一种颜色(蓝色)。我想我可以使用saveChartSeries()函数中现有的for循环来做到这一点,就像这样:
public void saveChartSeries()
{
//placeholder variable to relate between checklist item and chart series
string seriesName;
for (int index = 0; index < chListBoxChartSeries.Items.Count; ++index)
{
seriesName = chListBoxChartSeries.Items[index].ToString();
if (chListBoxChartSeries.CheckedItems.Contains(chListBoxChartSeries.Items[index]))
{
main.chartVitals.Series[seriesName].Enabled = true;
if (main.chartVitals.Series[seriesName].Enabled == true)
{
//set series color to Color.Red
//if there is already a red series, set to Color.Blue
}
}
else
{
main.chartVitals.Series[seriesName].Enabled = false;
}
}
}
这是目前为止我能得到的,如果有人能提供下一步,或者如果我过于复杂,有一个更简单的方法,我真的很感激有人指出来!
如果我理解正确的话,您是想用固定列表中的颜色为每个可见系列上色。
无论何时启用或禁用前一个系列,都将涉及更改后续系列的颜色,对吗?
下面是一个函数:
void colorSeries(Chart chart)
{
List<Color> seriescolors = new List<Color>
{ Color.Khaki, Color.Brown, Color.CornflowerBlue,
Color.DarkCyan, Color.ForestGreen, Color.Gold, Color.HotPink, Color.Indigo};
int co = 0;
foreach (Series s in chart.Series)
if (s.Enabled) s.Color = seriescolors[co++];
}
每次启用或禁用系列时调用它。
您还写道:如果我使它过于复杂和我想我可以使用现有的for循环来做到这一点。嗯。在我看来,你不仅使它过于复杂,而且设置了一个完全错误的优先级。
不要试图在'现有循环'中插入某些内容;相反,保持简单,在处理完用户操作后调用一个函数来处理显示颜色。
尝试"分离关注点",并始终致力于创建小而自给自足的例程!