原文作者 java_liyi, c#+Gdi,怎么移动和改变已经绘制好的图形位置和大小
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace DrawTest { public delegate void DrawMeHandler(Graphics g); public delegate void MouseMoveHandler(Point p); public partial class Canvas : UserControl { RectangleFigure rectangleFigure = new RectangleFigure(); DrawMeHandler drawMeHandler; MouseMoveHandler mouseMoveHandler; public Canvas() { InitializeComponent(); this.DoubleBuffered = true; this.Paint += Canvas_Paint; this.Load += Canvas_Load; this.MouseMove += Canvas_MouseMove; } void Canvas_MouseMove(object sender, MouseEventArgs e) { this.mouseMoveHandler.Invoke(e.Location); this.Refresh(); } void Canvas_Load(object sender, EventArgs e) { rectangleFigure.X = 10; rectangleFigure.Y = 10; rectangleFigure.Width = 100; rectangleFigure.Height = 50; drawMeHandler = new DrawMeHandler(rectangleFigure.DrawMe); mouseMoveHandler = new MouseMoveHandler(rectangleFigure.MouseMove); } void Canvas_Paint(object sender, PaintEventArgs e) { if (drawMeHandler != null) drawMeHandler.Invoke(e.Graphics); } /// <summary> /// 矩形对象 /// </summary> public class RectangleFigure { public int X { get; set; } public int Y { get; set; } public int Height { get; set; } public int Width { get; set; } public bool Actived { get; set; } public bool IsExist(Point p) { Rectangle rectangle = new Rectangle(this.X, this.Y, this.Width, this.Height); return rectangle.Contains(p); } public void MouseMove(Point p) { Actived = IsExist(p); } public void DrawMe(Graphics g) { Pen p = new Pen(Color.Black); g.FillRectangle(p.Brush, this.X, this.Y, this.Width, this.Height); if (Actived) { p.Color = Color.Red; g.DrawRectangle(p, this.X, this.Y, this.Width, this.Height); } } } } }