使用Chart控件進行實時監控
阿新 • • 發佈:2017-05-27
圖標 ont 獲取 har tpi 定時 方式 code tor
Chart作為微軟提供繪制圖表的控件,在剛開始使用時非常的迷茫,因為功能強大,涉及到的知識多,
一開始難以接收過來,但後天經過查找資料,耐心學習,終於還是有了一定的收獲。
Chart相當於一個大的圖紙,可以包含很多小的圖紙ChartArea,一個ChartArea可以包含很多的Series,
Series即Point,畫在ChartArea上的數據。
主要的思想就是添加Points的同時改變X軸的顯示範圍,以此來達到動態顯示的目的。
代碼解析:
Chart的相關設置
因為Chart控件是直接托入的,系統幫助初始化了,可以在對應的desiger.cs文件中找到。
還有事件的註冊,屬性等都可以在這個文件中找到。
//設置大小 MotorTestingChart.Height = 200; MotorTestingChart.Width = 500; //設置在series上顯示數值 Series是一個集合,需要有索引的方式指定 //MotorTestingChart.Series[0].IsValueShownAsLabel = true;//IsValueShowAsLable表示是否在圖表的曲線上標出以標簽的形式標出值 //設置Chart的邊框樣式 MotorTestingChart.BorderlineColor = Color.Blue;//邊框顏色 MotorTestingChart.BorderlineDashStyle= ChartDashStyle.Solid;//邊框的樣式 Solid表示是實線 MotorTestingChart.BorderlineWidth = 1;//邊框的寬度
//拖入Chart控件會自帶一個ChartArea ChartArea mtxChartArea = MotorTestingChart.ChartAreas[0];//獲取ChartArea mtxChartArea.BackColor = Color.Lavender;//設置ChartArea的背景顏色//X顯示的最小值 mtxChartArea.AxisX.Minimum = 0; //設置X軸的顯示範圍,在後續程序中將會用到 //X軸顯示的最大值 mtxChartArea.AxisX.Maximum = 10; mtxChartArea.AxisY.Minimum = -1850; mtxChartArea.AxisY.Maximum = 1850; //X軸的標題 mtxChartArea.AxisX.Title = "時間"; //X軸的標題顏色 mtxChartArea.AxisX.TitleForeColor = Color.Red; //X軸的刻度顏色 mtxChartArea.AxisX.LabelStyle.ForeColor = Color.Blue; //指定自動軸的模式 mtxChartArea.AxisX.IntervalAutoMode = IntervalAutoMode.VariableCount; //設置軸的間隔 //chartArea.AxisX.Interval = 1; mtxChartArea.AxisY.Title = "數值"; mtxChartArea.AxisY.TitleForeColor = Color.Red; mtxChartArea.AxisY.LabelStyle.ForeColor = Color.Blue; #region X和Y軸的網格線 取消網格線 mtxChartArea.AxisX.MajorGrid = new Grid() { Enabled = false }; mtxChartArea.AxisY.MajorGrid = new Grid() { Enabled = false }; #endregion
//標題 Title mtTitle = new Title(); mtTitle.Name = "mtTitle"; mtTitle.Text = "飛行姿態"; //添加標題 MyIEqualityCompare為自定義的比較類,繼承自IEqualityCompare接口 if (!MotorTestingChart.Titles.Contains<Title>(mtTitle, new MyIEqualityComparer<Title>())) { MotorTestingChart.Titles.Add(mtTitle); } //設置滾動條 mtxChartArea.AxisX.ScrollBar.IsPositionedInside = false; mtxChartArea.AxisX.ScrollBar.Enabled = false;
//Legend 圖例 Legend mtLegend = new Legend("mtLegend"); //mtLegend.LegendStyle = LegendStyle.Table; mtLegend.Title = "圖例"; mtLegend.ForeColor = Color.Red; mtLegend.BackColor = Color.HotPink;
if (!MotorTestingChart.Legends.Contains<Legend>(mtLegend, new MyIEqualityComparer<Legend>())) { MotorTestingChart.Legends.Add(mtLegend); } //拖入Chart控件會自帶一個Series Series mtSeries = MotorTestingChart.Series[0];//獲取Series mtSeries.Legend = "mtLegend";//綁定在那個圖例中顯示 mtSeries.LegendText = "mtxSeries";//在圖例中顯示的文字 mtSeries.Color = Color.Red;//線的顏色,同時也是所畫圖標的顏色,綁定在一起
mtSeries.ChartType=SeriesChartType.Spline;//設置Chart類型,就是以怎樣的形式畫圖表
mtSerise.ChartArea=MotorTestingChart.ChartArea[0];//是通過Series來綁定ChartArea的
Timer定時器
這部分的代碼的寫在定時器註冊的函數中。
Series series = GyroscoprChart.Series[0];//獲取Series series.Points.AddY(r.Next(1,100));//向Series的Points添加值 if (num0 > 10)//num是用來統計Series.Points的個數的,因為在Chart的設置中設置了X軸顯示的範圍為:0到10,
{ //所以Series的點個數大於10個之後就改變X數值的顯示範圍,以此來達到實時顯示的目的,同時因為Series的Point的添加也是跟隨定時器的 //所以它們配合的非常好 gyrChartArea.AxisX.Minimum = gyrChartcount - 10; gyrChartArea.AxisX.Maximum = gyrChartcount; }
使用Chart控件進行實時監控