Zeichnen von Formen an Mauskoordinaten mit dem Paint-Ereignis**
In C# besteht eine häufige Aufgabe darin, benutzerdefinierte Zeichenanwendungen zu erstellen. Dies wird normalerweise durch die Behandlung des Paint-Ereignisses eines Steuerelements oder durch Überschreiben der OnPaint-Methode in einem Benutzersteuerelement erreicht. Es kann jedoch eine Herausforderung sein, zu verstehen, wie Methoden mit mehreren Argumenten aufgerufen und PaintEvent verwendet werden. Dieser Artikel führt Sie durch den Prozess des Zeichnens von Formen an Mauskoordinaten mithilfe des Paint-Ereignisses.
Verwenden desPaintEvent für benutzerdefiniertes Zeichnen
Wann Beim Zeichnen auf der Oberfläche eines Steuerelements ist es wichtig, das Paint-Ereignis zu verwenden oder OnPaint zu überschreiben. Der Versuch, das Graphics-Objekt zwischenzuspeichern, führt zu ungültigen Ergebnissen. Verwenden Sie stattdessen das von PaintEventArgs bereitgestellte Graphics-Objekt. Wenn Sie komplexe Zeichenanforderungen haben, sollten Sie erwägen, das Graphics-Objekt an Methoden zu übergeben, die spezielle Zeichnungen ausführen können.
Rechtecke zeichnen mit Mauskoordinaten**
Zum Zeichnen von Formen an Mauskoordinaten Ein gängiger Ansatz besteht darin, das MouseDown-Ereignis zu verarbeiten und ein neues Objekt zu erstellen, das die Form darstellt und dessen Startpunkt und andere Eigenschaften zu speichern. Während sich die Maus bewegt, wird die aktuelle Position zur Berechnung der Formgröße verwendet. Diese Informationen werden im Paint-Ereignis verwendet, um die Form zu rendern.
Den Zeichenbereich löschen
Um den Zeichenbereich zu löschen, können Sie entweder Formobjekte aus der Liste entfernen (wenn Sie eine Liste zum Speichern von Formen verwenden) und das Steuerelement ungültig machen oder die Liste löschen und dann ungültig machen.
Beispiel Implementierung
Der folgende Codeausschnitt zeigt, wie Rechtecke an Mauskoordinaten mithilfe des Paint-Ereignisses gezeichnet werden:
// 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); } } }
In diesem Beispiel werden die Formkoordinaten in der Klasse DrawingRectangle gespeichert. Das MouseDown-Ereignis löst die Erstellung eines neuen Formobjekts aus, und nachfolgende MouseMove-Ereignisse passen seine Größe dynamisch an. Schließlich verwendet das Paint-Ereignis das Graphics-Objekt, um die Formen auf der Oberfläche des Steuerelements zu rendern.
Das obige ist der detaillierte Inhalt vonWie zeichne ich mit dem C#-Paint-Ereignis Formen an Mauskoordinaten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!