zoukankan      html  css  js  c++  java
  • c#winform图表控件使用示例

    公司有个需求,需要做嵌入式开发,跟硬件通信,把数据实时展示到winform中,网上查了资料,先写下个demo备用,到时候接入socket通信就完成了,具体效果如图

     

    实现的原理是把最开始的数据去掉,加入新的数据,接着不停的绑定曲线数据,就能达到曲线实时展示的效果了

    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void Form1_Load(object sender, EventArgs e)
            {
                lb_shebei.Text = "等待设备连接";
                c1.ChartAreas[0].Axes[0].MajorGrid.Enabled = false;//X轴上网格
                c1.ChartAreas[0].Axes[1].MajorGrid.LineDashStyle = ChartDashStyle.Dash;   //y轴网格类型 短横线
                c1.ChartAreas[0].Axes[1].MajorGrid.LineColor = Color.Gray;//Y轴网格线颜色
                c1.ChartAreas[0].Axes[0].MajorTickMark.Enabled = false;//  x轴上突出的小点
                c1.ChartAreas[0].AxisX.Enabled = AxisEnabled.False;//设置x轴不显示
                c1.ChartAreas[0].Axes[1].MajorTickMark.Enabled = false;//y轴上突出的小点
                c1.ChartAreas[0].Axes[1].IsInterlaced = false;  //显示交错带 
                //c1.ChartAreas[0].Axes[0].LabelStyle.Format = "#年";                      //设置X轴显示样式
                c1.Series[0].IsValueShownAsLabel = true;//曲线点是否显示值
                c1.Legends[0].Docking = Docking.Bottom;//调整图例位置
                c1.Legends[0].Alignment = StringAlignment.Center;//调整图例位置
                c1.Series[0].ChartType = SeriesChartType.Spline;//图表类型
                c1.Series[0].MarkerStyle = MarkerStyle.None;  //标记点类型
                c1.Series[0].XValueType = ChartValueType.Time;//x轴坐标类型
                c1.Series[0].Name = "应力监测";
                //c1.Series[0].IsValueShownAsLabel = true;//显示数值
                
                Thread t1 = new Thread(MyLine);
                t1.IsBackground = true;
                t1.Start();
            }
            List<DateTime> xlist = new List<DateTime>();
            List<int> ylist = new List<int>();
            void BindData()
            {
                Random rd = new Random();
                DateTime dt = DateTime.Now;
                ylist.Add(rd.Next(-2, 5));
                xlist.Add(dt);
                if (xlist.Count > 50)
                {
                    ylist.Remove(ylist[0]);
                    xlist.Remove(xlist[0]);
                }
            }
            public void MyLine()
            {
                while (true)
                {
                    BindData();
                    BindZp(xlist, ylist);
                    Thread.Sleep(1000);
                }
            }
            delegate void SetXCallback(List<DateTime> x, List<int> y);
            void BindZp(List<DateTime> x, List<int> y)
            {
                if (c1.InvokeRequired)
                {
                    SetXCallback d = new SetXCallback(BindZp);
                    this.Invoke(d, new object[] { x, y });
                }
                else
                {
                    c1.Series[0].Points.DataBindXY(x, y);//绑定数据
                }
            }
            private void btn_out_Click(object sender, EventArgs e)
            {
                DialogResult dr = MessageBox.Show("正在数据传输,确定要退出吗?", "系统提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                if (dr == DialogResult.OK)
                {
                    Application.Exit();
                    this.Dispose();
                    this.Close();
                }
            }
        }
  • 相关阅读:
    Linux ln 命令
    一文看懂云计算、虚拟化和容器
    Windows与Linux如何实现相互远程桌面连接?
    Windows与Linux相互远程桌面连接
    什么叫操作系统?
    Linux服务器如何识别移动硬盘?
    Linux主流发行版本配置IP总结(Ubuntu、CentOS、Redhat、Suse)
    实现Linux系统的回收站
    1108 Finding Average (20 分)
    1100 Mars Numbers (20 分)
  • 原文地址:https://www.cnblogs.com/sanjuantianshu/p/8776345.html
Copyright © 2011-2022 走看看