2010-12-23 52 views
1

我有一個List<Point>其中點包含X和Y不能畫到一個PictureBox在一個循環

我想什麼是循環這樣的列表,並繪製一條直線點對點,我這樣做的:

foreach (List<Point> wps in map.waypoints) 
{ 
    System.Drawing.Pen myPen; 
    myPen = new System.Drawing.Pen(System.Drawing.Color.Black); 
    System.Drawing.Graphics formGraphics = this.pictureBox1.CreateGraphics(); 

    Point startPos = new Point(wps[0].X, wps[0].Y); 

    foreach (Point p in wps) 
    { 
    formGraphics.DrawLine(myPen, startPos.X, startPos.Y, p.X, p.Y); 
    startPos = p; 
    } 

    myPen.Dispose(); 
    formGraphics.Dispose(); 
} 

但是沒有任何東西被繪製!我在pictureBox的on_click事件上做了同樣的事情,但是如果使用鼠標X和Y循環一些Points。我已經驗證了它們不包含點的列表:D

+0

對不起,這裏還早,但你爲什麼處理formGraphics?這是圖片箱的圖形 – RvdK 2010-12-23 08:53:30

+0

我發現了錯誤(或解決方案)。我正在繪製一個空的pictureBox。但是,當我畫一個pictureBox與一個圖像,它完全顯示:D – Jason94 2010-12-23 10:01:59

+1

你正在做這個根本錯誤。最小化你的窗口並恢復它:走了。拉傑什告訴你如何以正確的方式做到這一點。 – 2010-12-23 10:57:23

回答

4

將您的代碼寫入paint事件,所以它會刷新。 picturebox.Invalidate()將調用Paint()。

 private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     Pen pen = new Pen(Color.AliceBlue); 
     PointF p = new PointF(); 
    e.Graphics.DrawLine(pen,p.X,p.Y); 

    } 

它適合你的代碼

 private void pictureBox1_Paint(object sender, PaintEventArgs e) 
    { 
     System.Drawing.Pen myPen; 
      myPen = new System.Drawing.Pen(System.Drawing.Color.Black); 
     foreach (List<Point> wps in map.waypoints) 
     { 
      Point startPos = new Point(wps[0].X, wps[0].Y); 
      foreach (Point p in wps) 
      {  
       e.Graphics.DrawLine(myPen, startPos.X, startPos.Y, p.X, p.Y); 
       startPos = p; 
      } 
     } 
} 
如果你想繪製somefunction行

 public void DoFunction() 
     { 
     ..... 
     ..... 
     pictureBox1.Invalidate() /* here automatic call to pictureBox1_Paint(object sender, PaintEventArgs e) */ 

     . . . . 

     } 

明白了嗎?

1

不要忘了調用pictureBox1.Invalidate()或pictureBox1.Refresh(),以確保paint事件被調用。