Нарисуйте многоугольник с помощью мышиных точек в C # - PullRequest
5 голосов
/ 21 октября 2010

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

 //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);
                }

Спасибо

Ответы [ 2 ]

4 голосов
/ 21 октября 2010

Хорошо, вот пример кода:

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 голосов
/ 21 октября 2010

Сначала добавьте этот код:

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));
    }
...