单击两个新点并使用鼠标事件在这两个点之间绘制一条线

时间:2010-08-26 01:12:01

标签: c# events graphics gdi+

有关如何通过单击两个新点创建一条线然后在它们之间画一条线的建议吗? 我正在尝试创建一个像adobe acrobat那样的距离工具。

图片示例

alt text

3 个答案:

答案 0 :(得分:5)

解决了问题!

修改 这是代码:

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

答案 1 :(得分:2)

您可以在面板上处理鼠标单击事件(例如)并检索单击的位置(使用事件参数)。将此位置存储在属性中。根据需要为这么多点做到这一点。 在面板绘制事件中,调用父绘制,然后在点之间绘制线条。

答案 2 :(得分:2)

这样的事情应该这样做:

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事件中你已经有了一个图形对象。