Не удается добавить кривую к ZedGraph в C#

#c# #zedgraph

#c# #zedgraph

Вопрос:

Я пытаюсь добавить несколько кривых и осей с помощью ZedGraph. Но я успешно добавил точки к первой кривой после того, как попытался добавить вторую кривую. Первое значение ‘исчезает и myCurve.Points.Count равно 0. Например, если я добавлю 6 кривых, только шестая будет иметь значения, остальные считаются равными 0. Также любая из них отображается на графике. Вот код:

     colors = new Color[ff.documentColumnCount   4];
    zedGraphControl1.IsShowPointValues = true;
    myPane = zedGraphControl1.GraphPane;
    LineItem myCurve;
    Color[] colors;
    myPane.XAxis.Type = ZedGraph.AxisType.Date;
    myPane.XAxis.Scale.Format = "HH:mm:ss";
    myPane.XAxis.Scale.MajorUnit = DateUnit.Second;

    zamanValue = new double[ff.tarihSaat.Length - 4]; // x axis time values. ff is another windows form name, no problem here.

    for (int i = 0; i < ff.tarihSaat.Length - 4; i  )
    {

        zamanValue[i] = (double)new XDate(ff.tarihSaat[i].Year,
                                          ff.tarihSaat[i].Month,
                                          ff.tarihSaat[i].Day,
                                          ff.tarihSaat[i].Hour,
                                          ff.tarihSaat[i].Minute,
                                          ff.tarihSaat[i].Second);
        counter  ;
    }

    yaxisArray = new YAxis[ff.documentColumnCount   4]; // temp y axises

    for (int k = 0; k < chckboxNumber; k  )
    {

        tempPointPairList.Clear();
        tempPointPairList = createPairPointList(k); // Creates points, I see the correct values everytime, also no problem here.

        minYvalues[k] = Findmin(tempPointPairList);
        maxYvalues[k] = FindMax(tempPointPairList);

        myCurve = myPane.AddCurve(ff.columnNames[k   3], tempPointPairList, colors[k], SymbolType.None);
        myCurve.Line.Width = 2.5f;
        //myCurve.IsVisible = true;
        myCurve.YAxisIndex = k;
        myCurve.IsVisible = true;

        if (k == 0)
        {
            myPane.YAxis.IsVisible = true;
            myPane.YAxis.Scale.Max = 1;
            myPane.YAxis.Scale.Min = 0;
            myPane.YAxis.Scale.MajorStep = (myPane.YAxis.Scale.Max - myPane.YAxis.Scale.Min) / 10;
            myPane.YAxis.MajorGrid.IsVisible = true;
        }
        else
        {
            yaxisArray[k] = new YAxis(ff.columnNames[k   3]);
            //yaxisArray[k].Color = colors[k];
            yaxisArray[k].IsVisible = false;
            yaxisArray[k].Title.IsVisible = false;
            myPane.YAxisList.Add(yaxisArray[k]);

            if (minYvalues[k] == maxYvalues[k])
            {
                yaxisArray[k].Scale.Min = minYvalues[k] - 0.1;
                yaxisArray[k].Scale.Max = maxYvalues[k]   0.1;
            }
            else
            {
                yaxisArray[k].Scale.Min = minYvalues[k];
                yaxisArray[k].Scale.Max = maxYvalues[k];
            }

            myPane.YAxisList.Add(yaxisArray[k]);
        }
        yAxisListIndexes[k] = myPane.YAxisList.Count-1;

        minTextBoxes[k].Text = minYvalues[k].ToString();
        maxTextBoxes[k].Text = maxYvalues[k].ToString();

        durum[k].previousState = 1;
        durum[k].currentState = 1;
        chckBoxList[k].Checked = true;
        myCurve.Clear();

    }
    myPane.XAxis.Scale.Min = zamanValue[0];
    myPane.XAxis.Scale.Max = zamanValue[zamanValue.Length - 1];

    //myPane.YAxisList[0].IsVisible = true;
    zedGraphControl1.AxisChange();
    zedGraphControl1.Invalidate();
    zedGraphControl1.Refresh();
  

В чем ошибка?

Ответ №1:

Вы не добавляете кривые друг к другу, вы добавляете их в myPane.CurveList , чтобы они были у вас в myPane.Список кривых[0], myPane.CurveList[1] и так далее, но не в myCurve. myCurve служит хранилищем для текущей кривой, с которой вы работаете. Когда вы вызываете

 myCurve = myPane.AddCurve(ff.columnNames[k   3], tempPointPairList, colors[k], SymbolType.None);
  

создается совершенно новая кривая, добавляется в myPane.CurveList и записывается в переменную myCurve. У нее новое состояние, поскольку она только что создана. Вы можете получить доступ к своим предыдущим кривым в myPane.Список кривых.

Комментарии:

1. Спасибо за ответ, но это не сработало. Я добавляю строку кода, подобную этой: myPane. CurveList[k] = myCurve; графическая область по-прежнему пуста

2. Также myPane. Список кривых[k] = myPane. AddCurve(ff.ColumnNames[k 3], tempPointPairList, colors[k], SymbolType.None); точки не добавлены

3. Зачем вы добавили подобный код? Вы спросили, почему ваша кривая myCurve. Очки. Количество = 0 при добавлении новой кривой. Я вам это объяснил. Также в вашем вопросе вы не указали, что панель графика пуста, напротив, вы написали «Также любая из них отображается на графике», что означает, что показаны все кривые. И, наконец, я, скорее всего, не смог четко донести до вас свое сообщение, поскольку я никогда не предлагал вам записывать в массив CurveList вручную. Все, что я сказал, это то, что если вас это беспокоит, то myCurve. Очки. Значение Count равно 0. вы можете извлечь все предыдущие кривые (с ненулевыми значениями) из списка кривых.

4. Я просто заменяю строку кода myCurve = myPane. Добавьте кривую (ff.ColumnNames[k 3], tempPointPairList, colors[k], SymbolType.None); (старую) с помощью myPane. Список кривых[k] = myPane. AddCurve(ff.ColumnNames[k 3], tempPointPairList, colors [k], SymbolType.None); (новый) Извините за мой английский, я должен был сказать: также ни один из них не отображается на графике. Но раньше и сейчас по-прежнему нет доступа к значениям кривой. Да, программа добавляет их в список кривых, но внутри них пусто. Количество точек по-прежнему равно 0.