C# - 实时更新图表

标签 c# charts

请耐心等待,我是 Stack Overflow 的新手,但在研究我不喜欢的编程方法时,我已经将它作为一种资源使用了很长时间。

我读了一个tutorial on how to create a graph in a C# Windows Forms Application , 并试图找出如果我需要使用图表来绘制传感器中的数据总量时如何使其实时更新。为了测试它,我使用了一个计时器,每秒滴答一次(1000 毫秒)。在我可以将它与传感器一起使用之前,我有两个值自动递增 1。

我目前面临的问题是图表本身不会更新,只会保持加载表单时的绘制方式。 I thought it was because I have to redraw the chart with chart1.Update();,我尝试在每秒重新创建图表之前/之后使用它。但是,不管怎样,结果都是一样的。我只是想知道是否有什么我没有做或需要更改以便实时更新图表。

这是当前代码所在的位置:

public partial class Form1 : Form
{
    int a = 1;
    int b = 2;

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        // Data arrays.
        string[] seriesArray = { "Cats", "Dogs" };
        int[] pointsArray = { a, b };

        // Set palette.
        this.chart1.Palette = ChartColorPalette.SeaGreen;

        // Set title.
        this.chart1.Titles.Add("Pets");

        // Add series.
        for (int i = 0; i < seriesArray.Length; i++)
        {
            // Add series.
            Series series = this.chart1.Series.Add(seriesArray[i]);

            // Add point.
            series.Points.Add(pointsArray[i]);
        }
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        a++;
        b++;

        // Data arrays.
        string[] seriesArray = { "Cats", "Dogs" };
        int[] pointsArray = { a, b };

        // Set palette.
        this.chart1.Palette = ChartColorPalette.SeaGreen;

        // Set title.
        this.chart1.Titles.Add("Pets");

        // Add series.
        for (int i = 0; i < seriesArray.Length; i++)
        {
            // Add series.
            Series series = this.chart1.Series.Add(seriesArray[i]);

            // Add point.
            series.Points.Add(pointsArray[i]);
        }

        chart1.Update();
    }
}

最佳答案

您的代码有几个问题:

  • 计时器点击事件没有连接。我知道这不是因为否则你会得到一个异常告诉你..
  • ..您只能添加一个系列一次。您在每个 timer.Tick 上都这样做。这个和所有其他设置命令应该进入一个初始方法,如表单加载。

我已经更正了下面代码中的错误,但是,显然,数据还没有任何意义。 另外:虽然我添加了连接 timer.Tick 的代码,但未连接 button.Click。通常,您让设计人员通过双击控件来挂接控件的标准事件或通过双击属性页中控件的事件选项卡中的事件来完成此操作。

int a = 1;
int b = 2;
string[] seriesArray = { "Cats", "Dogs" };

private void Form1_Load(object sender, EventArgs e)
{
    // Set palette.
    this.chart1.Palette = ChartColorPalette.SeaGreen;

    // Set title.
    this.chart1.Titles.Add("Pets");

    // Add series
    this.chart1.Series.Clear();
    for (int i = 0; i < seriesArray.Length; i++)
    {
        chart1.Series.Add(seriesArray[i]);
    }
    // hook up timer event
    timer1.Tick += timer1_Tick;
}




private void timer1_Tick(object sender, EventArgs e)
{
    a++;
    b++;

    // Data array
    int[] pointsArray = { a, b };

    for (int i = 0; i < seriesArray.Length; i++)
    {
        // Add point.
        chart1.Series[i].Points.Add(pointsArray[i]);
    }

}

private void button1_Click(object sender, EventArgs e)
{
    timer1.Start();
}

关于C# - 实时更新图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26675637/

相关文章:

c# - 从 C# 访问 Win32 C/C++ 结构成员

c# - 没有扩展方法的智能感知

c# - 如何以编程方式查找 Commit Charge?

c# - 如何根据时间和工资计算价格

Javascript 复杂图

excel - 圆环图的条件格式

c# - 子属性更新调用它的父属性 `OnPropertyChanged`

excel - 防止 Excel 更改动态图表上的 x 轴

javascript - 为什么谷歌烛台fallingColor和risingColor不适用于此?

jakarta-ee - 导出 PDF 中的 Primefaces 图表