2010-10-21 7 views
4

Мне нужно, чтобы рисовать многоугольник с помощью точек щелчка мыши. Вот мой текущий код:Нарисуйте многоугольник, используя точки мыши в C#

//the drawshape varible is called when a button is pressed to select use of this tool 
      if (DrawShape == 4) 
       { 
        Point[] pp = new Point[3]; 
        pp[0] = new Point(e.Location.X, e.Location.Y); 
        pp[1] = new Point(e.Location.X, e.Location.Y); 
        pp[2] = new Point(e.Location.X, e.Location.Y); 
        Graphics G = this.CreateGraphics(); 
        G.DrawPolygon(Pens.Black, pp); 
       } 

Благодаря

+0

Я предполагаю, что вы на winforms. Вы предоставили код, но работает ли он? В чем ваш вопрос? –

+0

Да, я, и да, это не работает, я могу: t разработать, как хранить mouseclicks в массиве, чтобы они соединялись линией, как в MS Paint –

+0

Как пользователь должен рисовать многоугольник? Строка за строкой или весь полигон сразу? Вы хотите, чтобы пользователь щелкнул левой кнопкой мыши по x раз для очков, а затем щелкнул правой кнопкой мыши, чтобы рисовать (как вы знаете, когда пользователь закончил)? –

ответ

5

Ok вот некоторые примеры кода:

private List<Point> polygonPoints = new List<Point>(); 

private void TestForm_MouseClick(object sender, MouseEventArgs e) 
{ 
    switch(e.Button) 
    { 
     case MouseButtons.Left: 
      //draw line 
      polygonPoints.Add(new Point(e.X, e.Y)); 
      if (polygonPoints.Count > 1) 
      { 
       //draw line 
       this.DrawLine(polygonPoints[polygonPoints.Count - 2], polygonPoints[polygonPoints.Count - 1]); 
      } 
      break; 

     case MouseButtons.Right: 
      //finish polygon 
      if (polygonPoints.Count > 2) 
      { 
       //draw last line 
       this.DrawLine(polygonPoints[polygonPoints.Count - 1], polygonPoints[0]); 
       polygonPoints.Clear(); 
      } 
      break; 
    } 
} 

private void DrawLine(Point p1, Point p2) 
{ 
    Graphics G = this.CreateGraphics(); 
    G.DrawLine(Pens.Black, p1, p2); 
} 
3

Во-первых, добавьте этот код:

List<Point> points = new List<Point>(); 

На объекте вы чертите на, захватить событие OnClick. Один из аргументов должен иметь координаты X и Y щелчка. Добавьте их в массив точек:

points.Add(new Point(xPos, yPos)); 

И, наконец, где вы рисуете линии, используйте этот код:

if (DrawShape == 4) 
{ 
    Graphics G = this.CreateGraphics(); 
    G.DrawPolygon(Pens.Black, points.ToArray()); 
} 

EDIT:

Итак, выше код не совсем правильный. Прежде всего, это скорее всего событие Click, а не событие OnClick. Во-вторых, для того чтобы получить позицию мыши, вам нужны две переменные, объявленные с массивом точек,

int x = 0, y = 0; 

тогда событие перемещения мыши:

private void MouseMove(object sender, MouseEventArgs e) 
    { 
     x = e.X; 
     y = e.Y; 
    } 

Затем в вашем Click события:

private void Click(object sender, EventArgs e) 
    { 
     points.Add(new Point(x, y)); 
    } 
+0

Как должен выглядеть код для события OnClick, потому что на данный момент у меня ничего нет в этом случае? –

+0

На чем вы рисуете полигоны? – Entity

+0

На картинке –

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