启用时更改图表系列颜色,具体取决于系列[索引]

时间:2015-08-28 09:21:39

标签: c# winforms charts

快一点。 我有一个图表,可以显示9个不同的系列,数据来自用户的文本框,并填充这些相应的系列。

图表链接到checkedlistbox,列表框中选中的项目会在图表上启用各自的系列。任何时候都只能启用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;
            }
        }
    }

这和我到目前为止所取得的差不多,如果有人可以提供下一步,或者如果我过于复杂并且那里采用更简单的方式,我真的很感激有人指出来了!

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您希望使用固定列表中的颜色为每个可见系列着色。

这将涉及更改后续系列&#39;你启用或禁用上一个系列时的颜色,对吗?

这是一个能够做到这一点的功能:

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-loop 来做到这一点。嗯。在我的观点中,你既要过于复杂又要设置一个完全错误的优先级。

不要试图在现有的循环中适应某些东西&#39 ;;相反,保持简单,并在处理完用户操作后调用函数来处理显示颜色。

尝试&#39;分开关注&#39; ,并始终致力于创建小型且自给自足的例程!