Dessiner des formes aux coordonnées de la souris à l'aide de l'Événement Paint**
En C#, une tâche courante consiste à créer des applications de dessin personnalisées. Ceci est généralement réalisé en gérant l'événement Paint d'un contrôle ou en remplaçant la méthode OnPaint dans un contrôle utilisateur. Cependant, comprendre comment appeler des méthodes avec plusieurs arguments et utiliser PaintEvent peut être difficile. Cet article vous guidera tout au long du processus de dessin de formes aux coordonnées de la souris à l'aide de l'événement Paint.
Utilisation du PaintEvent pour un dessin personnalisé
Quand en dessinant sur la surface d'un contrôle, il est important d'utiliser l'événement Paint ou de remplacer OnPaint. Toute tentative de mise en cache de l'objet Graphics entraînera des résultats non valides. Utilisez plutôt l'objet Graphics fourni par PaintEventArgs. Si vous avez des exigences de dessin complexes, envisagez de transmettre l'objet Graphics à des méthodes capables d'effectuer des dessins spécialisés.
Dessiner des rectangles avec MouseCoordonnées**
Pour dessiner des formes aux coordonnées de la souris , une approche courante consiste à gérer l'événement MouseDown et à créer un nouvel objet représentant la forme, en stockant son point de départ et d'autres propriétés. Lorsque la souris se déplace, l'emplacement actuel est utilisé pour calculer la taille de la forme. Ces informations sont utilisées dans l'événement Paint pour restituer la forme.
Effacer la zone de dessin
Pour effacer la zone de dessin, vous pouvez soit supprimer les objets de forme de la liste (si vous utilisez une liste pour stocker des formes) et invalidez le contrôle ou effacez la liste puis invalidez.
Exemple Implémentation
L'extrait de code suivant montre comment dessiner des rectangles aux coordonnées de la souris à l'aide de l'événement 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); } } }
Dans cet exemple, les coordonnées de la forme sont stockées dans la classe DrawingRectangle. L'événement MouseDown déclenche la création d'un nouvel objet de forme et les événements MouseMove suivants ajustent sa taille de manière dynamique. Enfin, l'événement Paint utilise l'objet Graphics pour restituer les formes sur la surface du contrôle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!