使用 Paint 事件在鼠标坐标处绘制形状**
在 C# 中,常见任务是创建自定义绘图应用程序。这通常是通过处理控件的 Paint 事件或重写用户控件中的 OnPaint 方法来实现的。但是,了解如何调用具有多个参数的方法并使用 PaintEvent 可能具有挑战性。本文将指导您完成使用 Paint 事件在鼠标坐标处绘制形状的过程。
使用 PaintEvent 进行自定义绘图
何时在 Control 的表面上绘图时,使用 Paint 事件或重写 OnPaint 非常重要。尝试缓存 Graphics 对象将导致无效结果。相反,请使用 PaintEventArgs 提供的 Graphics 对象。如果您有复杂的绘图要求,请考虑将 Graphics 对象传递给可以执行专门绘图的方法。
使用 鼠标坐标绘制矩形**
在鼠标坐标处绘制形状,一种常见的方法是处理 MouseDown 事件并创建一个表示形状的新对象,存储其起点和其他属性。当鼠标移动时,当前位置用于计算形状的大小。此信息在 Paint 事件中用于渲染形状。
清除绘图区域
要清除绘图区域,您可以从列表中删除形状对象(如果使用列表来存储形状)并使控件无效或清除列表然后使其无效。
示例实现
以下代码片段演示了如何使用 Paint 事件在鼠标坐标处绘制矩形:
// Store shape parameters in a DrawingRectangle class List<DrawingRectangle> drawingRects = new List<DrawingRectangle>(); private class DrawingRectangle { public Rectangle Rect { get; set; } public Size Size { get; set; } public Point Location { get; set; } public Point StartPosition { get; set; } public Color DrawingColor { get; set; } = Color.LightGreen; public float PenSize { get; set; } = 3f; } // Start drawing on MouseDown private void form1_MouseDown(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) return; DrawingRects.Add(new DrawingRectangle() { Location = e.Location, Size = Size.Empty, StartPosition = e.Location, Owner = (Control)sender, DrawingColor = SelectedColor // Shape's Border Color }); } // Update shape size on MouseMove private void form1_MouseMove(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) return; var dr = DrawingRects[DrawingRects.Count - 1]; if (e.Y < dr.StartPosition.Y) { dr.Location = new Point(dr.Rect.Location.X, e.Y); } if (e.X < dr.StartPosition.X) { dr.Location = new Point(e.X, dr.Rect.Location.Y); } dr.Size = new Size(Math.Abs(dr.StartPosition.X - e.X), Math.Abs(dr.StartPosition.Y - e.Y)); this.Invalidate(); } // Draw shapes in the Paint event private void form1_Paint(object sender, PaintEventArgs e) { DrawShapes(e.Graphics); } // Method to draw shapes using Graphics object private void DrawShapes(Graphics g) { if (DrawingRects.Count == 0) return; g.SmoothingMode = SmoothingMode.AntiAlias; foreach (var dr in DrawingRects) { using (Pen pen = new Pen(dr.DrawingColor, dr.PenSize)) { g.DrawRectangle(pen, dr.Rect); } } }
在此示例中,形状坐标存储在 DrawingRectangle 类中。 MouseDown 事件触发新形状对象的创建,后续的 MouseMove 事件动态调整其大小。最后,Paint 事件使用 Graphics 对象来渲染 Control 表面上的形状。
以上是如何使用 C# Paint 事件在鼠标坐标处绘制形状?的详细内容。更多信息请关注PHP中文网其他相关文章!