c# - MSChart滚动条实现+绘图

标签 c# winforms mschart

我的 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 秒的帧显示,但是在设计 View 中,滚动条没有出现在我的图表下方,我不知道如何实现滚动条显示下一个 10 秒帧,目前当我点击滚动时它以 1 秒为步长滚动,所以在开始时它是 0 - 10,点击滚动,它是 1 - 11。我想要它所以当我点击滚动它会从 0-10 到 10-20。

我提到的另一个问题是每秒显示 170 个数据样本,

如果有人可以在我自己的基础上向我展示示例代码,以向我展示如何实现这一点,我将不胜感激,在此先感谢您!

最佳答案

我认为 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;
        }
    }

关于c# - MSChart滚动条实现+绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5093137/

相关文章:

C# 相当于 python 的 struct.pack

winforms - 如何获取表单的非最大化窗口大小?

c# - 来自 .Net 图表的意外行为

.net - 在 MSChart 中对齐主轴和副轴

c# - 尝试从 .NET 字典中提取键列表

c# - 捕获窗口类#32770

c# - 在 C# 中用 3DES 加密的 ColdFusion 中解密字符串

c# - 如何从子表单打开表单并在主表单面板中显示

c# - 无法连接到任何指定的 MySQL 主机登录表单

c# - 我可以在 MSChart 的饼图标签上同时显示标签和值吗