ソースコード
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); } } } }
実行結果
こんな感じにドラック中に矩形が表示されるようになります。