首頁 > 後端開發 > 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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板