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