【问题标题】:MSChart scroll bar implementation + plottingMSChart 滚动条实现 + 绘图
【发布时间】:2011-02-23 15:40:11
【问题描述】:

我的 Windows 窗体中有一个 MSCHart 控件,用 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 个数据样本,

如果有人可以向我展示我自己的示例代码,以向我展示如何实现它,我将不胜感激,非常感谢您!

【问题讨论】:

  • 你应该在 AxisScrollBarClicked 事件中处理这个并设置 Scaleview.Position 值

标签: c# winforms mschart


【解决方案1】:

我认为 cheedep 的评论是正确的。以下是我将如何修改您的代码来做到这一点。您需要将 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;
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2020-07-07
    相关资源
    最近更新 更多