C# マウスのドラックで矩形の表示

ソースコード

using System;
using System.Drawing;
using System.Windows.Forms;


 //マウスの動きで矩形を表示させるクラス
class RectangleRender
{
      
    Point m_StartMousePos = new Point(0,0);
    Point m_CurrentMousePos = new Point(0,0);
    Pen m_Color = Pens.WhiteSmoke;

    SolidBrush m_SolidBrush = new SolidBrush(Color.FromArgb(50, 255, 255, 255));
    Rectangle m_Rect = new Rectangle(0,0,0,0);
    public RectangleRender()
    {

    }
    public void SetStartMousePos(MouseEventArgs e)
    {
        m_StartMousePos = new Point(e.X,e.Y);
    }

    public void SetCurrentMousePos(MouseEventArgs e)
    {
        m_CurrentMousePos = new Point(e.X, e.Y);
    }

    public void Paint(Graphics g)
    {
        int width = m_CurrentMousePos.X - m_StartMousePos.X;
        int height= m_CurrentMousePos.Y - m_StartMousePos.Y;
        Point start = m_StartMousePos;

        //反転の場合
        if (width < 0)
        {
            width =  m_StartMousePos.X  - m_CurrentMousePos.X;
            start.X = m_CurrentMousePos.X;
        }
        //反転の場合
        if (height < 0)
        {
            height = m_StartMousePos.Y - m_CurrentMousePos.Y;
            start.Y = m_CurrentMousePos.Y;
        }

        m_Rect.X = start.X;
        m_Rect.Y = start.Y;
        m_Rect.Height = height;
        m_Rect.Width = width;

        g.DrawRectangle(m_Color, m_Rect);
        g.FillRectangle(m_SolidBrush, m_Rect);
    }
    public Rectangle GetRect()
    {
            return m_Rect;
    }
}

マウスイベントとペイントイベントの設定を行うこと。

using System;
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        bool isMoveMouse = false;
        RectangleRender m_RectangleRender = new RectangleRender();

        public Form1()
        {
            InitializeComponent();

            //ちらつき防止
            SetStyle(
    ControlStyles.DoubleBuffer |
    ControlStyles.UserPaint |
    ControlStyles.AllPaintingInWmPaint, true);
        }

        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            switch (e.Button)
            {
                case MouseButtons.Left:
                    isMoveMouse = true;
                    m_RectangleRender.SetStartMousePos(e);
                    break;
            }
        }
        private void Form1_MouseUp(object sender, MouseEventArgs e)
        {
            switch (e.Button)
            {
                case MouseButtons.Left:
                    isMoveMouse = false;
                    break;
            }
        }
        private void Form1_MouseMove(object sender, MouseEventArgs e)
        {
            m_RectangleRender.SetCurrentMousePos(e);
            Refresh();
        }

        private void TestPaint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            g.Clear(System.Drawing.Color.FromArgb(20, 230, 230, 230));

            if (isMoveMouse)
            {
                m_RectangleRender.Paint(g);
            }
        }
    }
}

実行結果

こんな感じにドラック中に矩形が表示されるようになります。 f:id:Brave345:20200130175338g:plain