C# Winform繪製動態曲線

來源:互聯網
上載者:User

前陣子做了一個項目,關於繪製即時溫度、空氣濕度的動態曲線,用到了C#的動態繪製曲線,後面給大家簡單介紹一下。

解決問題的主要思路:
1.將擷取的資料作為y軸的資料,儲存在一個動態鏈表的數組DataL(List<>),這樣方便之後的插入和刪除,實現動態。
2.建立畫布節點數組pArrData;
3.繪製曲線;
4.重新整理視窗;

這裡利用隨機數簡單的示範一下:

using System;using System.Collections;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;namespace 繪製曲線{    public partial class Form1 : Form    {        //隨機數        private static int iSeed = 8;        Random rd = new Random(iSeed);        //存放資料的數組最大值        private int sizeMax;        //存放y軸資料的數組鏈表        private List<int> DataL;        //存放在畫布上的資料節點的數組        private Point[] pArrData;        public Form1()        {            //初始化            InitializeComponent();            //根據畫布的寬決定x軸需要多少個數組            sizeMax = pcbDisplay.Width / 2;            //資料數組            DataL = new List<int>();            pArrData = new Point[sizeMax + 1];        }        private void Form1_Load(object sender, EventArgs e)        {            timer1.Start();        }        private void timer1_Tick(object sender, EventArgs e)        {            DataL.Add(rd.Next(20,180));            //資料鏈表是否達到x軸最大容量的數組(動態曲線的來源)            if (DataL.Count == sizeMax + 2)            {                DataL.RemoveAt(0);//移除鏈表第一個            }            //判斷資料鏈表是否為空白            if (DataL.Count != 0)            {                pArrData = new Point[DataL.Count];            }            //產生新的節點            for (int i = 0; i < sizeMax + 1; i++)            {                if (i >= DataL.Count)                {                    break;                }                pArrData[i] = new Point(i * 2, DataL[i]);            }            pcbDisplay.Refresh();        }        #region 繪製曲線        //定義畫筆        private Pen greenPen = new Pen(Color.Green, 1);        private Pen redPen = new Pen(Color.Red, 1);        private Pen blackPen = new Pen(Color.Black, 1);        /// <summary>        /// 繪製曲線        /// </summary>        /// <param name="sender"></param>        /// <param name="e"></param>        private void pcbDisplay_Paint(object sender, PaintEventArgs e)        {            if (DataL.Count != 1)            {                e.Graphics.DrawCurve(greenPen, pArrData);            }        }        #endregion    }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.