WindowsFomのpicureBox上での範囲指定

# 概要
- マウスを使ってpictureBox上で範囲指定するプログラムです。
- 指定した範囲を線で表示します。
- マウスの３つのイベントを利用してます。<br>
![SelectArea_06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1843142/32c944f6-9cfd-3c4d-ca48-4bfc7e745944.jpeg)

# 作業手順
## ①新規プロジェクト作成
- Windows フォームアプリケーション(.Net Framework)を選択
- 名前：SelectArea<br>
![SelectArea_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1843142/6bf40c73-d746-ce8f-71f3-90a3f4247b23.jpeg)

## ②pictureBoxを作成
・Name：_Picture
・BackColorを設定:pictureBoxの範囲を見える化
![SelectArea_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1843142/2aefed07-6ac6-ec3c-c2ab-9a12aada2b20.jpeg)
![SelectArea_04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1843142/fd39aa74-5144-cafb-c20d-512d40efd4cf.jpeg)

## ③Form1.cssに下記のように記述
```cs
using System;
using System.Drawing;
using System.Windows.Forms;

namespace SelectArea
{
    public partial class Form1 : Form
    {
        Rectangle _Rect;
        Point _PosStart;
        bool _IsSelect = false;

        public Form1()
        {
            InitializeComponent();
        }

        /// <summary>
        /// マウスボタンが押された時のイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnMouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                // 範囲選択開始
                _IsSelect = true;

                // 開始位置をセットする
                _PosStart.X = e.X;
                _PosStart.Y = e.Y;
            }
        }

        /// <summary>
        /// マウスポインターが移動した時のイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnMouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left && _IsSelect)
            {
                // 四角形を描く
                DrawRect(e.X, e.Y);
            }
        }

        /// <summary>
        /// マウスボタンが離された時のイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void OnMouseUp(object sender, MouseEventArgs e)
        {
            if ((e.Button == MouseButtons.Left) && (_IsSelect == true))
            {
                //四角形を描く
                DrawRect(e.X, e.Y);

                // 範囲選択終了
                _IsSelect = false;
            }
        }

        /// <summary>
        /// 四角形の描画
        /// </summary>
        /// <param name="clickX"></param>
        /// <param name="clickY"></param>
        void DrawRect(int clickX, int clickY)
        {
            // PictureBoxの範囲内に収める
            if (clickX < 0) clickX = 0;
            else if (clickX >= _PictureBox.Width) clickX = _PictureBox.Width - 1;
            if (clickY < 0) clickY = 0;
            else if (clickY >= _PictureBox.Height) clickY = _PictureBox.Height - 1;

            // サイズをセットする
            _Rect.Width = Math.Abs(clickX - _PosStart.X);
            _Rect.Height = Math.Abs(clickY - _PosStart.Y);

            // 開始位置より小さい場合は座標を入れ替える
            _Rect.X = (clickX >= _PosStart.X) ? _PosStart.X : clickX;
            _Rect.Y = (clickY >= _PosStart.Y) ? _PosStart.Y : clickY;

            // 青の破線に設定する
            Pen pen = new Pen(Color.Blue, 1);
            pen.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot;

            // 描画領域をリフレッシュする
            _PictureBox.Refresh();

            // 選択範囲を描画する
            Graphics g = _PictureBox.CreateGraphics();
            g.DrawRectangle(pen, _Rect);
            g.Dispose();
        }
    }
}
```
## ④マウス関連のイベントを登録
![SelectArea_05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1843142/a528c751-3dd3-11b6-6d07-8a10f0633ea3.jpeg)