2013-06-13 49 views
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); }

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

+0

所以,它工作? – Master117

回答

0

使用列表或您选择的收藏价值,那么只要点击/ letgo发生在当前点添加到列表中,从一个要素加上平局在你的完整列表,一直到下一个,直到结束之后。

+0

或者简单地划上一个'Image'而不是再画这个'Image'在'Panel' –

+0

非常感谢,我会试试看。 – Hari

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

} 

很明显,你可以跟踪点击次数,如果你想一定数量的顶点之后停止。您可以使用List<GraphicsPath>来表示多个行集合。

+0

非常感谢,我会试一试,让你知道。 – Hari