2017-01-25 5 views
0

Я хотел бы нарисовать многоугольник на форме, но я бы хотел добавить многоугольные позиции щелчком мыши.Рисование многоугольника на форме

Прямо сейчас я дал постоянные (x, y) позиции, и он возвращает мне многоугольник. Но я бы хотел добавить эту позицию, щелкнув мышью.

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

Есть много вопросов, и источников, доступных для получения кликов мыши. Что вы уже пробовали? Вы действительно пытались найти решение? Вы используете winforms или wpf? – Ben

+0

Вот пример кода, я думаю, это может вам помочь. http://stackoverflow.com/questions/12108534/drawing-a-polygon-according-to-the-input-coordinates –

+0

Я пытаюсь дать пользователю нарисовать многоугольник щелчком мыши, и я бы использовал его для определения области проценты по форме @Ben – boris315

ответ

0

создать customcontrol черчения 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()); 

    } 
} 

}

После сборки, вы можете добавить его из панели инструментов в форму.

Это пример результата: Polygon

+0

Звучит как overkill и по-прежнему не позволит перекрывать многоугольники. Класс Polygon кажется более подходящим. – TaW

+0

если это работает, пожалуйста, примите его –

Смежные вопросы