首页 > 后端开发 > C++ > 如何使用 C# Paint 事件在鼠标坐标处绘制形状?

如何使用 C# Paint 事件在鼠标坐标处绘制形状?

Patricia Arquette
发布: 2025-01-03 20:20:43
原创
218 人浏览过

How to Draw Shapes at Mouse Coordinates using the C# Paint Event?

使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板