Нажмите две новые точки и проведите линию между этими двумя точками, используя событие мыши - PullRequest
3 голосов
/ 26 августа 2010

Любые предложения, как создать линию, нажав две новые точки, а затем провести линию между ними? Я пытаюсь создать дистанционный инструмент, такой как в Adobe Acrobat.

Пример изображения

alt text

Ответы [ 3 ]

5 голосов
/ 29 августа 2010

Проблема решена!

РЕДАКТИРОВАТЬ: Вот код:

private Point p1, p2;
List<Point> p1List = new List<Point>();
List<Point> p2List = new List<Point>();

    private void Panel1_MouseDown(object sender, MouseEventArgs e)
    {
        if (p1.X == 0)
        {
            p1.X = e.X;
            p1.Y = e.Y;
        }
        else
        {
            p2.X = e.X;
            p2.Y = e.Y;

            p1List.Add(p1);
            p2List.Add(p2);

            Invalidate();
            p1.X = 0;
        }
    }

    private void Panel1_Paint(object sender, PaintEventArgs e)
    {
        using(var p = new Pen(Color.Blue, 4))
        {
            for(int x = 0; x<p1List.Count; x++){
                e.Graphics.DrawLine(p, p1List[x], p2List[x]);
            }
        }
    }
2 голосов
/ 26 августа 2010

Что-то вроде этого должно сделать это:

Point firstPoint;
Point seondPoint;

private void panel1_MouseDown(object sender, MouseEventArgs e)
{
    if (this.firstPoint == null) {
        this.firstPoint = e.Location;
    }

    if (this.secondPoint == null) {
        this.secondPoint = e.Location;
    }

    panel1.Invalidate();
}

private void panel1_Paint_1(object sender, PaintEventArgs e)
{       
    Using (pn as new Pen(Color.Blue, 5))
    {
        e.Graphics.DrawLine(pn, firstPoint, secondPoint);
    }
}

РЕДАКТИРОВАТЬ: Вам также не нужно делать CreateGraphics, чтобы нарисовать линию - в событии Paint у вас уже есть графический объект.

2 голосов
/ 26 августа 2010

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

...