C# - Chart.Series[index].Points.Label 不生成任何数据点标签

C# - Chart.Series[index].Points.Label not producing any label of datapoint

我有一个图表有 9 个不同的系列,其中只有两个可以同时启用。

我的用户要求当第一个数据点添加到图表时,它被标记为 'Start',这将启用允许用户标记 'End' 的按钮。

在解决方案的开发过程中,这不是问题,因为我可以随时控制启用哪个系列。现在已经为用户添加了在 'Options' 菜单中更改它的工具(系列名称和启用状态写入 'Settings' 文件,然后在下次程序开始时读取。

为了尝试这样做,我在我的 updateChart 函数中创建了一个 List<> 'enabledSeries',用于查找启用的图表系列并将它们添加到列表中。这已经做得很好,并且使用这种方法可以将数据点添加到图表中。但是,出于某种原因,标签现在不会出现在每个系列的开头。

updateChart() 及其子函数的代码如下所示:

    public void updateChart(int minutesElapsed)
    {
        //int latestReading = 0; //local variable to hold va1ue from txtBP.Text
        chartVitals.ChartAreas[0].AxisY2.Enabled = AxisEnabled.True;

        chartVitals.Text = "Vitals Visual";
        //Create correct coordinate using reading and time taken
        //add newest (last) element in each list to respective chart series, along with value from timer
        chartVitals.Series["Heart Rate"].Points.AddXY(minutesElapsed, HRlist.Last());
        chartVitals.Series["Ventilation Rate"].Points.AddXY(minutesElapsed, VRlist.Last());
        chartVitals.Series["Blood Pressure"].Points.AddXY(minutesElapsed, BPlist.Last());
        chartVitals.Series["o2 Saturation"].Points.AddXY(minutesElapsed, BOlist.Last());
        chartVitals.Series["ET Co2"].Points.AddXY(minutesElapsed, ETCo2list.Last());
        chartVitals.Series["Vaporiser Setting"].Points.AddXY(minutesElapsed, VSlist.Last());
        chartVitals.Series["FI Agent"].Points.AddXY(minutesElapsed, FIAlist.Last());
        chartVitals.Series["ET Agent"].Points.AddXY(minutesElapsed, ETAlist.Last());
        chartVitals.Series["Fresh Gas Flow"].Points.AddXY(minutesElapsed, FGFlist.Last());

        //stores all enabled series (MAX 2)
        List<string> enabledSeries = new List<string>();

        //identify and isolate the enabled series in the chart
        identifyEnabled(enabledSeries);
   }

    public void identifyEnabled(List<string> enabledSeries)
    {
        //takes name of chart series at current index
        string seriesName = "";

        //access all items in list
        for (int index = 0; index < chartVitals.Series.Count; ++index)
        {
            //assign name to variable
            seriesName = chartVitals.Series[index].Name;

            //series with this name is enabled
            if (chartVitals.Series[seriesName].Enabled)
            {
                //add name to list
                enabledSeries.Add(seriesName);
            }
        }

        formatEnabled(seriesName, enabledSeries);
    }

    public void formatEnabled(string seriesName, List<string> enabledSeries)
    {

        //color series in by index (0 - blue, 1 - red)
        string blueSeries = enabledSeries.First();
        string redSeries = enabledSeries[enabledSeries.IndexOf(blueSeries) + 1];

        //access all elements in enabledSeries
        for (int enabledIndex = 0; enabledIndex < enabledSeries.Count; ++enabledIndex)
        {
            //access all series in chartVitals
            for (int seriesIndex = 0; seriesIndex < chartVitals.Series.Count; ++seriesIndex)
            {
                //when there is item in series
                if (chartVitals.Series[seriesName].Points.Count > 0)
                {
                    string start = "[Start]";

                    //set series type as line
                    chartVitals.Series[seriesName].ChartType = SeriesChartType.Line;
                    //apply label to first point of series
                    chartVitals.Series[seriesName].Points.First().Label = start;

                    //enable button to mark end
                    btnOpEnd.Enabled = true;
                }
            }
        }

        //apply colours to series
        chartVitals.Series[blueSeries].Color = Color.Blue;
        chartVitals.Series[redSeries].Color = Color.Red;
    }

代码有点复杂,但是有注释,应该都有。如果有人能指出可能导致问题的原因或更简单的处理方法,我将不胜感激!

谢谢, 马克

这是您希望看到的吗?

编辑:我将formatEnabled更改为使用seriesIndex而不是seriesName,如下所示:

    public void formatEnabled(string seriesName, List<string> enabledSeries)
    {

        //color series in by index (0 - blue, 1 - red)
        string blueSeries = enabledSeries.First();
        string redSeries = enabledSeries[enabledSeries.IndexOf(blueSeries) + 1];

        //access all elements in enabledSeries
        for (int enabledIndex = 0; enabledIndex < enabledSeries.Count; ++enabledIndex)
        {
            //access all series in chartVitals
            for (int seriesIndex = 0; seriesIndex < chartVitals.Series.Count; ++seriesIndex)
            {
                //when there is item in series
                if (chartVitals.Series[seriesIndex].Points.Count > 0)
                {
                    string start = "[Start]";

                    //set series type as line
                    chartVitals.Series[seriesIndex].ChartType = SeriesChartType.Line;
                    //apply label to first point of series
                    chartVitals.Series[seriesIndex].Points.First().Label = start;

                    //enable button to mark end
                    //btnOpEnd.Enabled = true;
                }
            }
        }

        //apply colours to series
        chartVitals.Series[blueSeries].Color = Color.Blue;
        chartVitals.Series[redSeries].Color = Color.Red;
    }