2017-01-25 1 views
0

Je voudrais dessiner un polygone sur le formulaire mais je voudrais ajouter des positions de polygones par un clic de souris.Dessiner un polygone sur le formulaire

En ce moment, j'ai donné les positions constantes (x, y) et il me renvoie un polygone, mais je voudrais ajouter ces positions en cliquant sur la souris.

Point[] po = new Point[] 
      { 

       new Point {X=15, Y=51}, 
       new Point {X=40, Y= 13}, 
       new Point {X=87, Y= 53}, 
       new Point {X=56, Y= 87}, 
       new Point {X=44, Y= 32}, 
      }; 
+2

Il y a beaucoup de questions, et les sources disponibles pour recevoir les clics de souris. Qu'avez-vous déjà essayé? Avez-vous réellement essayé de trouver une solution? Utilisez-vous winforms ou wpf? – Ben

+0

Voici un exemple de code, je pense que cela peut vous aider. http://stackoverflow.com/questions/12108534/drawing-a-polygon-according-to-the-input-coordinates –

+0

J'essaie de laisser l'utilisateur dessiner un polygone par un clic de souris et je voudrais l'utiliser pour déterminer la région de intérêt sur le formulaire @Ben – boris315

Répondre

0

créer un CustomControl pour tirage Polygon:

using System.Collections.ObjectModel; 
using System.Drawing; 
using System.Linq; 
using System.Windows.Forms; 

namespace WindowsFormsApplication4 
{ 
public partial class DrawPolygon : Control 
{ 
    ObservableCollection<PointF> points; 
    public int SideCount 
    { 
     get { return sideCount; } 
     set { sideCount = value; } 
    } 

    public DrawPolygon() 
    { 
     InitializeComponent(); 
     points = new ObservableCollection<PointF>(); 
     points.CollectionChanged += Points_CollectionChanged; 
    } 

    private void Points_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) 
     if (points.Count >= sideCount) 
      { 
       points = new ObservableCollection<PointF>(points.Skip(points.Count - sideCount)); 
       points.CollectionChanged += Points_CollectionChanged; 
      } 
     Refresh(); 
    } 
    protected override void OnMouseClick(MouseEventArgs e) 
    { 
     base.OnMouseClick(e); 
     points.Add(e.Location); 
    } 

    protected override void OnPaint(PaintEventArgs pe) 
    { 
     base.OnPaint(pe); 
     if (points.Count > 1) 
      pe.Graphics.DrawPolygon(Pens.Aqua, points.ToArray()); 

    } 
} 

}

Après la construction, vous pouvez l'ajouter de la boîte à outils à votre formulaire.

Ceci est un exemple de résultat: Polygon

+0

Semble comme overkill et ne permettra toujours pas les polygones qui se chevauchent. Une classe Polygon semble plus appropriée. – TaW

+0

si cela fonctionne pour vous s'il vous plaît l'accepter –