当启用时,根据系列[索引]更改图表系列颜色

本文关键字:系列 颜色 索引 启用 | 更新日期: 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循环来做到这一点。嗯。在我看来,你不仅使它过于复杂,而且设置了一个完全错误的优先级。

不要试图在'现有循环'中插入某些内容;相反,保持简单,在处理完用户操作后调用一个函数来处理显示颜色。

尝试"分离关注点",并始终致力于创建小而自给自足的例程!