0

我的任务是使用鼠标单击在面板上绘制路径。路径应该类似于左键单击并在 (x1, y1) 处释放,移动鼠标然后左键单击并在 (x2, y2) 处释放。然后应该从 (x1, y1) 到 (x2, y2) 画一条线。现在,当我将鼠标移动到其他位置(例如(x3,y3)然后左键单击并释放时,应该从(x2,y2)到(x3,y3)绘制一条线。

以这种方式,我想绘制一条具有多个顶点的路径,最多可达(Xn,Yn)。

目前我只能从 (x1, y1) 到 (x2, y2) 绘制。

using (Pen draw_pen = new Pen(Color.Blue, PEN_WIDTH)) { g.DrawLine(draw_pen, _StartPt.X, _StartPt.Y, _EndPt.X, _EndPt.Y); }

有谁可以让我知道这是否可以实现?如果是,请提供示例代码片段。提前致谢。

4

2 回答 2

0

您可以使用 GraphicsPath 来表示它。这是一个简单的例子:

public partial class Form1 : Form
{

    private int PEN_WIDTH = 5;
    private Point lastPoint = new Point(-1, -1);
    private System.Drawing.Drawing2D.GraphicsPath GP = new System.Drawing.Drawing2D.GraphicsPath();

    public Form1()
    {
        InitializeComponent();
        this.Paint += Form1_Paint;
        this.MouseDown += Form1_MouseDown;
    }

    void Form1_MouseDown(object sender, MouseEventArgs e)
    {
        Point pt = new Point(e.X, e.Y);
        if (lastPoint.X == -1 && lastPoint.Y == -1)
        {
            lastPoint = pt;
        }
        else
        {
            GP.AddLine(lastPoint, pt);
            this.Refresh();
        }
        lastPoint = pt;
    }

    void Form1_Paint(object sender, PaintEventArgs e)
    {
        using (Pen draw_pen = new Pen(Color.Blue, PEN_WIDTH)) 
        {
            Graphics g = e.Graphics;
            g.DrawPath(draw_pen, GP);
        }
    }

}

显然,如果您想在一定数量的顶点后停止,您可以跟踪点击次数。您可以使用 aList<GraphicsPath>来表示一组以上的线条。

于 2013-06-13T15:38:43.430 回答
0

使用您选择的列表或收藏品,然后每当发生点击/放手时,将当前点添加到您的列表中,在您的完整列表上添加绘图后,始终从一个元素到下一个元素直到结束。

于 2013-06-13T09:08:44.150 回答