График с ZedGraph с использованием другого класса, кроме формы

Я пытаюсь создать программу, которая будет считывать некоторые значения, анализировать их и отображать результат. Однако я не могу заставить сюжет работать, что, вероятно, связано с ошибочными параметрами, отправленными в мой класс сюжета.

Это то, что у меня есть в моем классе Form:

    private void FileButton_Click(object sender, EventArgs e)
    {
        OpenFileDialog ReadFileDialog = new OpenFileDialog();

        if (ReadFileDialog.ShowDialog() == DialogResult.OK)
        {
            ReadFile Acceleration = new ReadFile();

            if (PlotResultCheckbox.Checked)
            {
                PlotClass PlotResult = new PlotClass(); 
                //The FormClass being the class I'll call to plot from various part of my program

                PlotResult.FFTPlot();
            }

        }
     }


    private void FFTPlotWindow_Load(object sender, EventArgs e)
    {
          //Don't really know what to put here but this is my Plot-window anyway
    }

Какие параметры, помимо очевидных с данными, которые я буду рисовать, я должен передать в свой класс Plot? Должен ли я сделать FFTPlotWindow общедоступным?

Заранее спасибо Аксель


person user2950764    schedule 16.11.2013    source источник
comment
Я думаю, что ответ здесь: stackoverflow.com/questions/6614801/   -  person Larry    schedule 16.11.2013
comment
@Лоран, может быть! Я до сих пор не могу понять, как именно, так как я все еще хочу построить график в своей форме. Когда я создаю для него класс и метод, кажется, что он не может взаимодействовать или даже найти мое окно ZedGraph в моей форме. Делать это общедоступным тоже не помогает, поэтому мне нужно знать, какие параметры передавать в форму и из формы, чтобы иметь возможность отображать результат. Извините, если я не ясно об этом раньше.   -  person user2950764    schedule 16.11.2013
comment
Я не понимаю роль PlotClass. Содержит ли он данные, которые должны быть построены? Что должен делать метод FFTPlot()?   -  person Larry    schedule 16.11.2013
comment
@Laurent О, я вижу, что не упомянул об этом в первом посте. PlotClass — это класс, в котором я собрал все методы построения графика (то есть метод построения графика в частотной области/БПФ, во временной области и некоторые статистические данные). Все, что должен делать FFTPlot(), это брать входные данные (два списка или массива) с данными и строить график в форме. Однако я не могу заставить PlotClass получить доступ к окну ZedGraph в моей форме, хотя я пытался сделать все общедоступным.   -  person user2950764    schedule 16.11.2013


Ответы (1)


Чтобы добиться того, что вы пытаетесь сделать, я могу предложить два подхода.

  • Заставьте PlotClass взаимодействовать с ZedGraph:

В этом случае PlotClass должен об этом знать.

Вы можете указать ссылку на свой элемент управления ZedGraph в методе FFTPlot, который должен строить график.

public class PlotClass
{
    ...

    public void FFTPlot(ZedGraphControl zgc)
    {   
        // Build the point list and attach it to a new curve

        GraphPane myPane = zgc.GraphPane;
        var list = new PointPairList();

        // Your code to add the points
        // ...

        var myCurve = myPane.AddCurve("My Curve", list, Color.Blue, SymbolType.None);
        zgc.AxisChange();
        zgc.Invalidate();
    }
}

Затем :

if (PlotResultCheckbox.Checked)
{
    PlotClass PlotResult = new PlotClass(); 
    PlotResult.FFTPlot(zedGraphControl1);
}
  • Другой подход (я бы порекомендовал) состоит в том, чтобы ваша форма отвечала за обработку элемента управления ZedGraph, используя данные, предоставляемые PlotClass. Таким образом, PlotClass останется независимым от каких-либо графических проблем.

So :

if (PlotResultCheckbox.Checked)
{
    PlotClass PlotResult = new PlotClass(); 

    GraphPane myPane = zedGraphControl1.GraphPane;
    var list = new PointPairList();

    // Your code to add the points using a property exposed by PlotResult
    // ...

    var myCurve = myPane.AddCurve("My Curve", list, Color.Blue, SymbolType.None);
    zedGraphControl1.AxisChange();
    zedGraphControl1.Invalidate();
}

Независимо от выбранного вами подхода, вики ZedGraph будет очень полезна.

person Larry    schedule 16.11.2013
comment
Это работает, большое спасибо! Причина, по которой я не хотел делать это вторым способом, который вы бы предпочли, заключается в том, что я буду вызывать эту функцию во многих частях программы и не хочу писать код много раз (по очевидным причинам). В любом случае, еще раз большое спасибо за вашу помощь! - person user2950764; 17.11.2013