Реализация полосы прокрутки MSChart + построение графиков - PullRequest
2 голосов
/ 23 февраля 2011

У меня есть элемент управления MSCHart в моей форме Windows, кодирование на C #.В основном у меня есть массив данных для заполнения диаграммы.Мне нужно было сделать следующее:

1) Считать диаграмму в 10-секундных кадрах. 2) В каждом 10-секундном кадре мне нужно составлять 170 элементов данных в секунду из моего массива.и это будет продолжаться до конца.

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

Если кто-то могпожалуйста, помогите пролить некоторый свет на это для меня, я был бы очень признателен.

Вот фрагмент того, что я сделал до сих пор

    #region SetupChart()
    public bool SetupChart()
    {
        try
        {
            //Here is where I create the chart scale to show frames of 10 secs
            this.view.chart.ChartAreas[0].AxisX.ScaleView.Size = 10;
            return true;
        }
        catch { return false; }

    }
    #endregion

    #region Draw()
    public bool Draw()
    {
        try
        {
            view.Data = this.dllCall.GetData(1);

            int startSecond = 0;
            foreach (Int16 item in view.Data)
            {
              //Here is where I read each element from my array, unsure how to plot 170 per second :S
              this.view.chart.Series["MySeries"].Points.AddXY(startSecond, item);
    startSecond++;

            }
            return true;
        }
        catch (Exception ex)
        {
            this.ErrorMessage = ex.Message;
            return false;
        }
    }

Как вы можете видеть из приведенного выше кода, яЕсли вначале график отображается в 10-секундном кадре, но в режиме конструктора полоса прокрутки не отображается под моим графиком, я не могу понять, как реализовать полосу прокрутки для отображения следующего 10-секундного кадра, в настоящее время, когда янажмите, чтобы прокрутить, он делает это с шагом в 1 секунду, поэтому в начале его 0 - 10, нажмите прокрутку, его 1 - 11. Я хотел, чтобы, когда я нажимал на прокрутку, он шел от 0-10 до 10 - 20.

Другая проблема, о которой я упомянул, показывает 170 выборок данных в секунду,

Пожалуйста, если бы кто-нибудь мог показать мне собственный пример кода поверх, чтобы показать мне, как это может быть реализовано, я бы предложилуточните это, большое спасибо заранее!

1 Ответ

0 голосов
/ 01 марта 2012

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

    #region SetupChart()
    public bool SetupChart()
    {
        try
        {
            //Here is where I create the chart scale to show 170 data points
            this.view.chart.ChartAreas[0].AxisX.ScaleView.Size = 170;
            return true;
        }
        catch { return false; }

    }
    #endregion

    #region Draw()
    public bool Draw()
    {
        try
        {
            view.Data = this.dllCall.GetData(1);

            int startSecond = 0;
            foreach (Int16 item in view.Data)
            {
                this.view.chart.Series["MySeries"].Points.AddXY(startSecond, item);
                startSecond++;

            }
            return true;
        }
        catch (Exception ex)
        {
            this.ErrorMessage = ex.Message;
            return false;
        }
    }

    private void chart_AxisScrollBarClicked(object sender, System.Windows.Forms.DataVisualization.Charting.ScrollBarEventArgs e)
    {
        if (e.Axis == chart.ChartAreas[0].AxisX)
        {
            if (e.ButtonType == System.Windows.Forms.DataVisualization.Charting.ScrollBarButtonType.SmallIncrement)
                chart.ChartAreas[0].AxisX.ScaleView.Position += 170;
            else if (e.ButtonType == System.Windows.Forms.DataVisualization.Charting.ScrollBarButtonType.SmallDecrement)
                chart.ChartAreas[0].AxisX.ScaleView.Position -= 170;
        }
    }
...