C# chart控件实时动态显示数据

这里介绍了一个最简单的实时显示数据的完整示例,

本文参考了 使用MSChart实时动态显示折线图 ,谢谢原作者的分享。

平台:VS2013,C#windows程序。

源代码下载:http://download.csdn.net/detail/lj22377/7713939

1、首先,将chart控件添加到窗口。

2、设置chart - series 主要t属性:

2.1 IsXValueIndexed = true;

2.2 XValueType = Time;

3、编写初始化函数:

private void InitChart()
        {
            DateTime time = DateTime.Now;
            chartTimer.Interval = 1000;
            chartTimer.Tick += chartTimer_Tick;
            chartDemo.DoubleClick += chartDemo_DoubleClick;

            Series series = chartDemo.Series[0];
            series.ChartType = SeriesChartType.Spline;

            chartDemo.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
            chartDemo.ChartAreas[0].AxisX.ScaleView.Size = 5;
            chartDemo.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;
            chartDemo.ChartAreas[0].AxisX.ScrollBar.Enabled = true;

            chartTimer.Start();

        }
4、编写timer事件:

void chartTimer_Tick(object sender, EventArgs e)
        {
            Random ra = new Random();
            Series series = chartDemo.Series[0];
            series.Points.AddXY(DateTime.Now, ra.Next(1, 10));
            chartDemo.ChartAreas[0].AxisX.ScaleView.Position = series.Points.Count - 5;
            //throw new NotImplementedException();
        }
5、编写chart双击事件。(因为滑动条可以隐藏,隐藏之后不知道怎么恢复,所以就编写了这个双击事件,以恢复滑动条)

void chartDemo_DoubleClick(object sender, EventArgs e)
        {
            chartDemo.ChartAreas[0].AxisX.ScaleView.Size = 5;
            chartDemo.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;
            chartDemo.ChartAreas[0].AxisX.ScrollBar.Enabled = true;
            //throw new NotImplementedException();
        }

6、完整代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting; //需要添加的命名空间

namespace ChartRealTimeShow
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            InitChart();
        }

        System.Windows.Forms.Timer chartTimer = new System.Windows.Forms.Timer();

        private void InitChart()
        {
            DateTime time = DateTime.Now;
            chartTimer.Interval = 1000;
            chartTimer.Tick += chartTimer_Tick;
            chartDemo.DoubleClick += chartDemo_DoubleClick;

            Series series = chartDemo.Series[0];
            series.ChartType = SeriesChartType.Spline;

            chartDemo.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
            chartDemo.ChartAreas[0].AxisX.ScaleView.Size = 5;
            chartDemo.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;
            chartDemo.ChartAreas[0].AxisX.ScrollBar.Enabled = true;

            chartTimer.Start();

        }

        void chartDemo_DoubleClick(object sender, EventArgs e)
        {
            chartDemo.ChartAreas[0].AxisX.ScaleView.Size = 5;
            chartDemo.ChartAreas[0].AxisX.ScrollBar.IsPositionedInside = true;
            chartDemo.ChartAreas[0].AxisX.ScrollBar.Enabled = true;
            //throw new NotImplementedException();
        }

        void chartTimer_Tick(object sender, EventArgs e)
        {
            Random ra = new Random();
            Series series = chartDemo.Series[0];
            series.Points.AddXY(DateTime.Now, ra.Next(1, 10));
            chartDemo.ChartAreas[0].AxisX.ScaleView.Position = series.Points.Count - 5;
            //throw new NotImplementedException();
        }

    }
}






  • 18
    点赞
  • 171
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
c++中的max_element函数是用来查找容器中的最大元素的。它有两种常见的用法。第一种用法是通过传递容器的起始位置和结束位置来比较元素的大小,例如: ``` vector<int> nums = {3, 5, 7, 2, 7, 6, 4}; auto max_num = max_element(nums.begin(), nums.end()); ``` 这将返回指向最大元素的迭代器。如果要获取最大值的位置,可以通过解引用迭代器来获取: ``` int max_pos = *max_element(nums.begin(), nums.end()); ``` 第二种用法是直接使用容器的默认比较函数来比较元素的大小,例如: ``` vector<int> nums = {3, 5, 7, 2, 7, 6, 4}; auto max_num = max_element(nums.begin(), nums.end(), less<int>()); ``` 同样地,这将返回指向最大元素的迭代器。同样地,如果要获取最大值的位置,可以通过解引用迭代器来获取。 总结来说,c++的max_element函数可以帮助我们快速找到容器中的最大元素,并可以通过迭代器或解引用迭代器来获取最大值的位置。<span class="em">1</span><span class="em">2</span> #### 引用[.reference_title] - *1* [C++ max_element()的使用](https://blog.csdn.net/qq_39686486/article/details/92626424)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [毕业设计:基于C++和Qt+mysql实现的物业管理系统.zip](https://download.csdn.net/download/qq_35831906/88259232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值