C# マウスの動きをグラフで可視化する

 
#やりたいこと


#コード
```
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

public partial class Form1 : Form
    {

        //時間経過をはかるためのクラス
        Stopwatch myStopWatch = new Stopwatch();
        //スタート・ストップボタン用
        Boolean sw = false;

        //マウス位置
        int ms_x = 0;
        int ms_y = 0;

        string str_ms_x = "ms_x";
        string str_ms_y = "ms_y";


        public Form1()
        {
            InitializeComponent();
        }

        private void chart1_Click(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //=======================================================
            // グラフの用意
            //=======================================================

            // フォームをロードするときの処理
            chart1.Series.Clear();  　　　　　　　// Seriesを初期化
            chart1.ChartAreas.Clear();

            // ChartにChartAreaを追加
            chart1.ChartAreas.Add(new ChartArea("ChartArea"));

            // ChartにSeriesを追加(2要素)
            chart1.Series.Add(str_ms_x);
            chart1.Series.Add(str_ms_y);
            // グラフの種別を指定（折れ線）
            chart1.Series[str_ms_x].ChartType = SeriesChartType.Line;
            chart1.Series[str_ms_y].ChartType = SeriesChartType.Line;

            //グラフの表示範囲をX = 300 / Y = 600に限定する
            chart1.ChartAreas[0].AxisX.IsMarginVisible = false;
            chart1.ChartAreas[0].AxisX.ScaleView.Size = 100;
            chart1.ChartAreas[0].AxisY.IsMarginVisible = false;
            chart1.ChartAreas[0].AxisY.ScaleView.Size = 600;

        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            //スイッチがoff（計測開始していない）とき
            if (sw == false)
            {
                //計測開始
                myStopWatch.Start();
                //表示更新タイマー開始
                timer1.Start();
                //スイッチon
                sw = true;
                //リセットボタン使用不可
                btnReset.Enabled = false;
                //「スタート」だったボタンの表示を「ストップ」に変更
                btnStart.Text = "Stop";
            }

            //スイッチがoff以外のとき（つまりはonのとき）
            else
            {
                //計測終了
                myStopWatch.Stop();
                //表示固定
                timer1.Stop();
                //スイッチoff
                sw = false;
                //リセットボタン使用可
                btnReset.Enabled = true;
                //「ストップ」だったボタンの表示を「スタート」に変更
                btnStart.Text = "Start";
            }
        }

        private void btnReset_Click(object sender, EventArgs e)
        {
            //ストップウォッチの内容をゼロにする
            myStopWatch.Reset();
            //リセットした状態をlabel1に表示する
            label1.Text = myStopWatch.Elapsed.ToString();

            //グラフをリセット　？？？
            
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            //label1にスタートから現在までの時間を表示させる
            label1.Text = myStopWatch.Elapsed.ToString();

            //label2にマウスの位置を表示する
            label2.Text = "X=" + ms_x + "/ Y=" + ms_y;

            // データが100まで蓄積する
            if (chart1.Series[str_ms_x].Points.Count <= 100)
            {
                chart1.Series[str_ms_x].Points.AddY(ms_x);
                chart1.Series[str_ms_y].Points.AddY(ms_y);
            }
            else
            {
                //データをシフト
                for (int i = 0; i < 99; i++)
                {
                    chart1.Series[str_ms_x].Points[i].YValues = chart1.Series[str_ms_x].Points[i + 1].YValues;
                    chart1.Series[str_ms_y].Points[i].YValues = chart1.Series[str_ms_y].Points[i + 1].YValues;
                }
                //最新データをセット
                chart1.Series[str_ms_x].Points.RemoveAt(99); // ？？？　グラフの最新データが更新されてる？
                chart1.Series[str_ms_y].Points.RemoveAt(99); //　
                //chart1.Series[str_ms_x].Points.AddXY(99,ms_x);
                //chart1.Series[str_ms_y].Points.AddXY(99,ms_y);

            }

        }

        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            //マウスイベントのたびにデータを保持
            ms_x = e.X;
            ms_y = e.Y;
        }
    }