C#.NET MSCHARTはデータ監視と自動スクロールを実現

2694 ワード

/// <summary>
///      
/// </summary>
        private void InitChartView()
        {
            //   
            ChartView.ChartAreas["Default"].AxisX.ScrollBar.Size = 20;
            ChartView.ChartAreas["Default"].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
            ChartView.ChartAreas["Default"].AxisX.ScrollBar.IsPositionedInside = false;
            ChartView.ChartAreas["Default"].AxisX.ScrollBar.BackColor = Color.White;
            ChartView.ChartAreas["Default"].AxisX.ScrollBar.LineColor = Color.Black;
            ChartView.ChartAreas["Default"].AxisX.ScrollBar.ButtonColor = Color.FromArgb(224, 224, 224);
            ChartView.ChartAreas["Default"].AxisX.ScaleView.Size = 40;//        
            ChartView.ChartAreas["Default"].AxisX.ScrollBar.IsPositionedInside = true;
            ChartView.ChartAreas["Default"].AxisY.Maximum = 200;
            ChartView.ChartAreas["Default"].AxisX.Minimum = 1;//X    

            Series IniSeries = ChartView.Series.Add("SeriesD56");
            IniSeries.ChartArea = "Default";
            IniSeries.ChartType = SeriesChartType.Spline;//    
            IniSeries.BorderWidth = 2;//    
            IniSeries.Color = Color.Red;//    
            IniSeries.IsValueShownAsLabel = true;//          
            IniSeries.XValueType = ChartValueType.DateTime;//  X     

            IniSeries = ChartView.Series.Add("SeriesD58");
            IniSeries.ChartArea = "Default";
            IniSeries.ChartType = SeriesChartType.Spline;
            IniSeries.BorderWidth = 2;
            IniSeries.Color = Color.FromArgb(255, 128, 0);
            IniSeries.IsValueShownAsLabel = true;
            IniSeries.XValueType = ChartValueType.DateTime;
        }

グローバル変数を定義する必要があります(複数のデータビューがある可能性があり、複数のビューのデータ量が異なる可能性があるため、ここでは最大データ点数を比較値とします)
private int NowChartPointsCount=0;//現在追加されているデータポイント数を記録
監視データポイントのリアルタイム追加
NowChartPointsCount++;
ChartView.Series["SeriesD56"].Points.AddXY(MTestLog.AddTime.ToString("yyyy/MM/dd HH:mm:ss"),Convert.ToDouble(MTestLog.D56));
一番後ろのデータポイントまで自動スクロール
if (NowChartPointsCount > ChartView.ChartAreas["Default"].AxisX.ScaleView.Size)  {           ChartView.ChartAreas["Default"].AxisX.ScaleView.Position = NowChartPointsCount - ChartView.ChartAreas["Default"].AxisX.ScaleView.Size;   }