Heim > Backend-Entwicklung > C++ > Wie zeichne ich mit dem C#-Paint-Ereignis Formen an Mauskoordinaten?

Wie zeichne ich mit dem C#-Paint-Ereignis Formen an Mauskoordinaten?

Patricia Arquette
Freigeben: 2025-01-03 20:20:43
Original
218 Leute haben es durchsucht

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

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);
        }
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage