Winform中使用C#

时间:2018-09-18 15:27:08

标签: c# winforms charts data-visualization

我是Winform Application的新朋友。我正在尝试实现一个line chart,它具有多个series并具有一个checkedListbox以选择particular series

代码:

if (tbROI.SelectedTab == tbROI.TabPages["tbPageROIPoint"])
            {
                //If all ROI TAB
                myIndex = GetMyChartIndex(mSeries, chartPointROI); // 4 for Point ROI tab

                m_PointDataCounter++;
                if (m_PointDataCounter > 15)
                {
                    if (myIndex > 5)
                    {
                        chartPointROI.Series[mSeries].Points.RemoveAt(0);
                        m_PointDataCounter--;
                    }
                }

                if (cbListPOI.GetItemChecked(ROIIndex))
                {
                    chartPointROI.Series[mSeries].Points.AddXY(timestring, mData);

                    chartPointROI.ResetAutoValues();
                }
            }

使用此代码,我将数据放在chart control上。 X-axis代表时间,Y-axis代表数据。

Initailly,当我选择listbox的任何项目时,该系列从左侧开始,但是一段时间后,如果我再开始一个系列,它也将从左侧开始,但是我想从当前时间开始代表X轴。

当我在一段时间后停止任何series时,如果我再次开始使用相同的series,我希望在系列中留出一定的间隔,以便可以清楚地看到该系列已停止。

就我而言,系列总是从左侧开始。如果我停止任何系列然后重新开始,它将在停止的地方继续。

预先感谢

编辑:

enter image description here

它表明了

1 个答案:

答案 0 :(得分:1)

这是一个如何删除一些DataPoints以及还原它们的示例。

请注意间隙中的平线。如果要“去除”该线以最好的颜色,则最后一点透明;我为此添加了注释代码。

List<DataPoint> marked = new List<DataPoint>();
int markedStartIndex = -1;

private void button1_Click(object sender, EventArgs e)
{
    // I create a testperiod to remove
    DateTime dt0 = DateTime.Now.AddMonths(2);
    DateTime dt1 = dt0.AddHours(123);
    DateTime dt2 = dt0.AddHours(173);

    // convert to doubles:
    double startPeriod = dt1.ToOADate();
    double endPeriod = dt2.ToOADate();

    // short reference
    Series s = chart1.Series[0];
    // select the points in the period. pick your border conditions!
    marked = s.Points.Cast<DataPoint>()
                     .Where(x => x.XValue > startPeriod && x.XValue < endPeriod)
                     .ToList();

    if (marked.Count < 1) return;

    // remember where we started to remove
    markedStartIndex = s.Points.IndexOf(marked.First()); 
    foreach (DataPoint dp in marked) s.Points.Remove(dp);

    // Optionally 'hide' the gap line
    //if (markedStartIndex > 0) s.Points[markedStartIndex].Color = Color.Transparent;
}

将它们带回的代码将它们插入正确的位置,然后清除这些点。

private void button2_Click(object sender, EventArgs e)
{
    Series s = chart1.Series[0];
    // optionally re-color the gap-line 
    //if (markedStartIndex > 0) s.Points[markedStartIndex].Color = s.Color;

    foreach (DataPoint dp in marked) s.Points.Insert(markedStartIndex++, dp);
    marked.Clear();
}

有透明间隙的结果:

enter image description here

您也可以将间隙用红色上色并存储多于一组的点;为此,您必须存储起点,并确保重新插入时管理多个期间!

除了实际删除点之外,您还可以选择简单地将其着色为透明。